From 6f9e1680085e7bb4d258f6f8116369d122e196e1 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 16 Jan 2023 03:03:27 +0000 Subject: CTAN sync 202301160303 --- graphics/pgf/base/source/BalloonLayout_script.h | 32 - .../pgf/base/source/BarycenterHeuristic_script.h | 20 - graphics/pgf/base/source/BarycenterPlacer_script.h | 32 - graphics/pgf/base/source/CirclePlacer_script.h | 56 - graphics/pgf/base/source/CircularLayout_script.h | 47 - .../pgf/base/source/CoffmanGrahamRanking_script.h | 34 - .../pgf/base/source/DfsAcyclicSubgraph_script.h | 20 - graphics/pgf/base/source/EdgeCoverMerger_script.h | 32 - .../pgf/base/source/ExampleLocalMakefileConfig.mk | 7 - graphics/pgf/base/source/FMMMLayout_script.h | 44 - .../pgf/base/source/FastHierarchyLayout_script.h | 48 - .../pgf/base/source/FastMultipoleEmbedder_script.h | 51 - .../base/source/FastSimpleHierarchyLayout_script.h | 41 - graphics/pgf/base/source/GEMLayout_script.h | 101 -- .../pgf/base/source/GreedyCycleRemoval_script.h | 20 - .../pgf/base/source/GreedyInsertHeuristic_script.h | 20 - graphics/pgf/base/source/INSTALL | 28 - .../pgf/base/source/IndependentSetMerger_script.h | 32 - graphics/pgf/base/source/InterfaceFromC++.c++ | 215 ---- graphics/pgf/base/source/InterfaceFromC++.h | 190 --- graphics/pgf/base/source/InterfaceFromC.c | 1189 ------------------ graphics/pgf/base/source/InterfaceFromC.h | 613 ---------- graphics/pgf/base/source/InterfaceFromOGDF.c++ | 105 -- graphics/pgf/base/source/InterfaceFromOGDF.h | 45 - .../base/source/LocalBiconnectedMerger_script.h | 32 - .../pgf/base/source/LongestPathRanking_script.h | 50 - graphics/pgf/base/source/MakefileConfig.mk | 45 - graphics/pgf/base/source/MatchingMerger_script.h | 32 - graphics/pgf/base/source/MedianHeuristic_script.h | 20 - graphics/pgf/base/source/MedianPlacer_script.h | 26 - graphics/pgf/base/source/MultilevelLayout_script.h | 33 - graphics/pgf/base/source/OptimalRanking_script.h | 34 - .../pgf/base/source/PlanarizationLayout_script.h | 43 - graphics/pgf/base/source/RandomMerger_script.h | 32 - graphics/pgf/base/source/RandomPlacer_script.h | 32 - graphics/pgf/base/source/SiftingHeuristic_script.h | 40 - graphics/pgf/base/source/SimpleDemoC.c | 42 - graphics/pgf/base/source/SimpleDemoCPlusPlus.c++ | 47 - graphics/pgf/base/source/SimpleDemoOGDF.c++ | 43 - graphics/pgf/base/source/SolarMerger_script.h | 36 - graphics/pgf/base/source/SolarPlacer_script.h | 26 - graphics/pgf/base/source/SplitHeuristic_script.h | 20 - .../pgf/base/source/SpringEmbedderFRExact_script.h | 66 - graphics/pgf/base/source/SpringEmbedderFR_script.h | 45 - graphics/pgf/base/source/SpringEmbedderKK_script.h | 39 - graphics/pgf/base/source/SugiyamaLayout_script.h | 54 - graphics/pgf/base/source/ZeroPlacer_script.h | 32 - graphics/pgf/base/source/energybased_script.h | 31 - graphics/pgf/base/source/layered_script.h | 46 - graphics/pgf/base/source/misclayout_script.h | 13 - graphics/pgf/base/source/module_script.h | 27 - graphics/pgf/base/source/multilevelmixer_script.h | 33 - graphics/pgf/base/source/ogdf_script.c++ | 23 - graphics/pgf/base/source/pgfmathtestsuite.tex | 1264 -------------------- graphics/pgf/base/source/planarity_script.h | 11 - graphics/pgf/base/source/tikzexternaltest.code.tex | 41 - .../source/tikzexternaltest.sharedpreamble.tex | 20 - graphics/pgf/base/source/tikzexternaltest.tex | 12 - .../pgf/base/source/tikzexternaltestmakefile.tex | 12 - .../pgf/base/source/unittest_luamathparser.tex | 562 --------- 60 files changed, 5986 deletions(-) delete mode 100644 graphics/pgf/base/source/BalloonLayout_script.h delete mode 100644 graphics/pgf/base/source/BarycenterHeuristic_script.h delete mode 100644 graphics/pgf/base/source/BarycenterPlacer_script.h delete mode 100644 graphics/pgf/base/source/CirclePlacer_script.h delete mode 100644 graphics/pgf/base/source/CircularLayout_script.h delete mode 100644 graphics/pgf/base/source/CoffmanGrahamRanking_script.h delete mode 100644 graphics/pgf/base/source/DfsAcyclicSubgraph_script.h delete mode 100644 graphics/pgf/base/source/EdgeCoverMerger_script.h delete mode 100644 graphics/pgf/base/source/ExampleLocalMakefileConfig.mk delete mode 100644 graphics/pgf/base/source/FMMMLayout_script.h delete mode 100644 graphics/pgf/base/source/FastHierarchyLayout_script.h delete mode 100644 graphics/pgf/base/source/FastMultipoleEmbedder_script.h delete mode 100644 graphics/pgf/base/source/FastSimpleHierarchyLayout_script.h delete mode 100644 graphics/pgf/base/source/GEMLayout_script.h delete mode 100644 graphics/pgf/base/source/GreedyCycleRemoval_script.h delete mode 100644 graphics/pgf/base/source/GreedyInsertHeuristic_script.h delete mode 100644 graphics/pgf/base/source/INSTALL delete mode 100644 graphics/pgf/base/source/IndependentSetMerger_script.h delete mode 100644 graphics/pgf/base/source/InterfaceFromC++.c++ delete mode 100644 graphics/pgf/base/source/InterfaceFromC++.h delete mode 100644 graphics/pgf/base/source/InterfaceFromC.c delete mode 100644 graphics/pgf/base/source/InterfaceFromC.h delete mode 100644 graphics/pgf/base/source/InterfaceFromOGDF.c++ delete mode 100644 graphics/pgf/base/source/InterfaceFromOGDF.h delete mode 100644 graphics/pgf/base/source/LocalBiconnectedMerger_script.h delete mode 100644 graphics/pgf/base/source/LongestPathRanking_script.h delete mode 100644 graphics/pgf/base/source/MakefileConfig.mk delete mode 100644 graphics/pgf/base/source/MatchingMerger_script.h delete mode 100644 graphics/pgf/base/source/MedianHeuristic_script.h delete mode 100644 graphics/pgf/base/source/MedianPlacer_script.h delete mode 100644 graphics/pgf/base/source/MultilevelLayout_script.h delete mode 100644 graphics/pgf/base/source/OptimalRanking_script.h delete mode 100644 graphics/pgf/base/source/PlanarizationLayout_script.h delete mode 100644 graphics/pgf/base/source/RandomMerger_script.h delete mode 100644 graphics/pgf/base/source/RandomPlacer_script.h delete mode 100644 graphics/pgf/base/source/SiftingHeuristic_script.h delete mode 100644 graphics/pgf/base/source/SimpleDemoC.c delete mode 100644 graphics/pgf/base/source/SimpleDemoCPlusPlus.c++ delete mode 100644 graphics/pgf/base/source/SimpleDemoOGDF.c++ delete mode 100644 graphics/pgf/base/source/SolarMerger_script.h delete mode 100644 graphics/pgf/base/source/SolarPlacer_script.h delete mode 100644 graphics/pgf/base/source/SplitHeuristic_script.h delete mode 100644 graphics/pgf/base/source/SpringEmbedderFRExact_script.h delete mode 100644 graphics/pgf/base/source/SpringEmbedderFR_script.h delete mode 100644 graphics/pgf/base/source/SpringEmbedderKK_script.h delete mode 100644 graphics/pgf/base/source/SugiyamaLayout_script.h delete mode 100644 graphics/pgf/base/source/ZeroPlacer_script.h delete mode 100644 graphics/pgf/base/source/energybased_script.h delete mode 100644 graphics/pgf/base/source/layered_script.h delete mode 100644 graphics/pgf/base/source/misclayout_script.h delete mode 100644 graphics/pgf/base/source/module_script.h delete mode 100644 graphics/pgf/base/source/multilevelmixer_script.h delete mode 100644 graphics/pgf/base/source/ogdf_script.c++ delete mode 100644 graphics/pgf/base/source/pgfmathtestsuite.tex delete mode 100644 graphics/pgf/base/source/planarity_script.h delete mode 100644 graphics/pgf/base/source/tikzexternaltest.code.tex delete mode 100644 graphics/pgf/base/source/tikzexternaltest.sharedpreamble.tex delete mode 100644 graphics/pgf/base/source/tikzexternaltest.tex delete mode 100644 graphics/pgf/base/source/tikzexternaltestmakefile.tex delete mode 100644 graphics/pgf/base/source/unittest_luamathparser.tex (limited to 'graphics/pgf/base/source') diff --git a/graphics/pgf/base/source/BalloonLayout_script.h b/graphics/pgf/base/source/BalloonLayout_script.h deleted file mode 100644 index 311bee3e09..0000000000 --- a/graphics/pgf/base/source/BalloonLayout_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct BalloonLayout_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - BalloonLayout layout; - - parameters->configure_option ("BalloonLayout.evenAngles", - &BalloonLayout::setEvenAngles, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("BalloonLayout") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.misclayout.BalloonLayout")); - - s.declare (key ("BalloonLayout.evenAngles") - .type ("boolean") - .documentation_in ("pgf.gd.doc.ogdf.misclayout.BalloonLayout")); - } -}; - diff --git a/graphics/pgf/base/source/BarycenterHeuristic_script.h b/graphics/pgf/base/source/BarycenterHeuristic_script.h deleted file mode 100644 index 709e91d3de..0000000000 --- a/graphics/pgf/base/source/BarycenterHeuristic_script.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -struct BarycenterHeuristic_script : - scripting::declarations, - scripting::factory -{ - - ogdf::BarycenterHeuristic* make (scripting::run_parameters* parameters) { - return new ogdf::BarycenterHeuristic; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("BarycenterHeuristic") - .documentation_in ("pgf.gd.doc.ogdf.layered.BarycenterHeuristic") - .set_module ("TwoLayerCrossMin", this)); - } -}; - diff --git a/graphics/pgf/base/source/BarycenterPlacer_script.h b/graphics/pgf/base/source/BarycenterPlacer_script.h deleted file mode 100644 index 19ac75d314..0000000000 --- a/graphics/pgf/base/source/BarycenterPlacer_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct BarycenterPlacer_script : - scripting::declarations, - scripting::factory -{ - ogdf::BarycenterPlacer* make (scripting::run_parameters* parameters) { - using namespace ogdf; - BarycenterPlacer* r = new BarycenterPlacer; - - parameters->configure_option ("BarycenterPlacer.weightedPositionPriority", - &BarycenterPlacer::weightedPositionPriority, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("BarycenterPlacer") - .set_module ("InitialPlacer", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.BarycenterPlacer")); - - s.declare (key ("BarycenterPlacer.weightedPositionPriority") - .type ("boolean") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.BarycenterPlacer")); - - } - -}; diff --git a/graphics/pgf/base/source/CirclePlacer_script.h b/graphics/pgf/base/source/CirclePlacer_script.h deleted file mode 100644 index f208dbdecf..0000000000 --- a/graphics/pgf/base/source/CirclePlacer_script.h +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include - -struct CirclePlacer_script : - scripting::declarations, - scripting::factory -{ - ogdf::CirclePlacer* make (scripting::run_parameters* parameters) { - using namespace ogdf; - CirclePlacer* r = new CirclePlacer; - - parameters->configure_option ("CirclePlacer.circleSize", - &CirclePlacer::setCircleSize, *r); - parameters->configure_option ("CirclePlacer.radiusFixed", - &CirclePlacer::setRadiusFixed, *r); - - - char* s = 0; - - if (parameters->option("CirclePlacer.nodeSelection", s)) { - if (strcmp(s, "new") == 0) - r->setNodeSelection(CirclePlacer::nsNew); - else if (strcmp(s, "old") == 0) - r->setNodeSelection(CirclePlacer::nsOld); - else if (strcmp(s, "all") == 0) - r->setNodeSelection(CirclePlacer::nsAll); - - free(s); - } - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("CirclePlacer") - .set_module ("InitialPlacer", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.CirclePlacer")); - - s.declare (key ("CirclePlacer.circleSize") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.CirclePlacer")); - - s.declare (key ("CirclePlacer.radiusFixed") - .type ("boolean") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.CirclePlacer")); - - s.declare (key ("CirclePlacer.nodeSelection") - .type ("string") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.CirclePlacer")); - - } - -}; diff --git a/graphics/pgf/base/source/CircularLayout_script.h b/graphics/pgf/base/source/CircularLayout_script.h deleted file mode 100644 index d0840e64f6..0000000000 --- a/graphics/pgf/base/source/CircularLayout_script.h +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include - -struct CircularLayout_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - CircularLayout layout; - - parameters->configure_option ("CircularLayout.minDistCircle", - &CircularLayout::minDistCircle, layout); - parameters->configure_option ("CircularLayout.minDistLevel", - &CircularLayout::minDistLevel, layout); - parameters->configure_option ("CircularLayout.minDistSibling", - &CircularLayout::minDistSibling, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("CircularLayout") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.misclayout.CircularLayout")); - - s.declare (key ("CircularLayout.minDistCircle") - .type ("length") - .alias_function ("function (o) return o['part pre sep'] + o['part post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.layered.CircularLayout")); - - s.declare (key ("CircularLayout.minDistLevel") - .type ("length") - .alias_function ("function (o) return o['level pre sep'] + o['level post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.layered.CircularLayout")); - - s.declare (key ("CircularLayout.minDistSibling") - .type ("length") - .alias_function ("function (o) return o['sibling pre sep'] + o['sibling post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.layered.CircularLayout")); - } -}; - diff --git a/graphics/pgf/base/source/CoffmanGrahamRanking_script.h b/graphics/pgf/base/source/CoffmanGrahamRanking_script.h deleted file mode 100644 index d8cb01a771..0000000000 --- a/graphics/pgf/base/source/CoffmanGrahamRanking_script.h +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include - -struct CoffmanGrahamRanking_script : - scripting::declarations, - scripting::factory -{ - - ogdf::CoffmanGrahamRanking* make (scripting::run_parameters* parameters) { - using namespace ogdf; - CoffmanGrahamRanking* r = new CoffmanGrahamRanking; - - parameters->configure_option ("CoffmanGrahamRanking.width", - &CoffmanGrahamRanking::width, *r); - parameters->configure_module ("AcyclicSubgraphModule", - &CoffmanGrahamRanking::setSubgraph, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - s.declare (key ("CoffmanGrahamRanking") - .documentation_in ("pgf.gd.doc.ogdf.layered.CoffmanGrahamRanking") - .set_module ("RankingModule", this)); - - s.declare (key ("CoffmanGrahamRanking.width") - .type ("number") - .initial ("3") - .documentation_in ("pgf.gd.doc.ogdf.layered.CoffmanGrahamRanking")); - } -}; - diff --git a/graphics/pgf/base/source/DfsAcyclicSubgraph_script.h b/graphics/pgf/base/source/DfsAcyclicSubgraph_script.h deleted file mode 100644 index 0d784ff3f5..0000000000 --- a/graphics/pgf/base/source/DfsAcyclicSubgraph_script.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -struct DfsAcyclicSubgraph_script : - scripting::declarations, - scripting::factory -{ - - ogdf::DfsAcyclicSubgraph* make (scripting::run_parameters* parameters) { - return new ogdf::DfsAcyclicSubgraph; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("DfsAcyclicSubgraph") - .documentation_in ("pgf.gd.doc.ogdf.layered.DfsAcyclicSubgraph") - .set_module ("AcyclicSubgraphModule", this)); - } -}; - diff --git a/graphics/pgf/base/source/EdgeCoverMerger_script.h b/graphics/pgf/base/source/EdgeCoverMerger_script.h deleted file mode 100644 index cb91637d5d..0000000000 --- a/graphics/pgf/base/source/EdgeCoverMerger_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct EdgeCoverMerger_script : - scripting::declarations, - scripting::factory -{ - ogdf::EdgeCoverMerger* make (scripting::run_parameters* parameters) { - using namespace ogdf; - EdgeCoverMerger* r = new EdgeCoverMerger; - - parameters->configure_option ("EdgeCoverMerger.factor", - &EdgeCoverMerger::setFactor, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("EdgeCoverMerger") - .set_module ("MultilevelBuilder", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.EdgeCoverMerger")); - - s.declare (key ("EdgeCoverMerger.factor") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.EdgeCoverMerger")); - - } - -}; diff --git a/graphics/pgf/base/source/ExampleLocalMakefileConfig.mk b/graphics/pgf/base/source/ExampleLocalMakefileConfig.mk deleted file mode 100644 index b42f097f54..0000000000 --- a/graphics/pgf/base/source/ExampleLocalMakefileConfig.mk +++ /dev/null @@ -1,7 +0,0 @@ -MYCFLAGS=-isysroot/Developer/SDKs/MacOSX10.7.sdk -MYLDFLAGS= - -ARCHFLAGS=-arch x86_64 - -SHAREDFLAGS=-undefined dynamic_lookup -bundle -llua -L$(LUALIBPATH) - diff --git a/graphics/pgf/base/source/FMMMLayout_script.h b/graphics/pgf/base/source/FMMMLayout_script.h deleted file mode 100644 index bdaf26bf67..0000000000 --- a/graphics/pgf/base/source/FMMMLayout_script.h +++ /dev/null @@ -1,44 +0,0 @@ -#include -#include - -struct FMMMLayout_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - FMMMLayout layout; - - layout.newInitialPlacement(false); - layout.qualityVersusSpeed(FMMMLayout::qvsGorgeousAndEfficient); - - parameters->configure_option ("FMMMLayout.unitEdgeLength", - &FMMMLayout::unitEdgeLength, layout); - parameters->configure_option ("FMMMLayout.randSeed", - &FMMMLayout::randSeed, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - s.declare (key ("FMMMLayout") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.FMMMLayout")); - - s.declare (key ("FMMMLayout.randSeed") - .type ("number") - .initial ("42") - .alias ("random seed") - .documentation_in ("pgf.gd.doc.ogdf.energybased.FMMMLayout")); - - s.declare (key ("FMMMLayout.unitEdgeLength") - .type ("length") - .initial ("1cm") - .alias_function ("function (o) return o['node pre sep'] + o['node post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.energybased.FMMMLayout")); - } - -}; diff --git a/graphics/pgf/base/source/FastHierarchyLayout_script.h b/graphics/pgf/base/source/FastHierarchyLayout_script.h deleted file mode 100644 index c8063e063a..0000000000 --- a/graphics/pgf/base/source/FastHierarchyLayout_script.h +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include - -struct FastHierarchyLayout_script : - scripting::declarations, - scripting::factory -{ - - ogdf::FastHierarchyLayout* make (scripting::run_parameters* parameters) { - using namespace ogdf; - FastHierarchyLayout* r = new FastHierarchyLayout; - - parameters->configure_option ("FastHierarchyLayout.fixedLayerDistance", - &FastHierarchyLayout::fixedLayerDistance, *r); - parameters->configure_option ("FastHierarchyLayout.layerDistance", - &FastHierarchyLayout::layerDistance, *r); - parameters->configure_option ("FastHierarchyLayout.nodeDistance", - &FastHierarchyLayout::nodeDistance, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("FastHierarchyLayout") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastHierarchyLayout") - .set_module ("HierarchyLayoutModule", this)); - - s.declare (key ("FastHierarchyLayout.fixedLayerDistance") - .type ("boolean") - .initial ("false") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastHierarchyLayout")); - - s.declare (key ("FastHierarchyLayout.layerDistance") - .type ("length") - .alias_function ("function (o) return o['level pre sep'] + o['level post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastHierarchyLayout")); - - s.declare (key ("FastHierarchyLayout.nodeDistance") - .type ("length") - .alias_function ("function (o) return o['sibling pre sep'] + o['sibling post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastHierarchyLayout")); - } -}; - - diff --git a/graphics/pgf/base/source/FastMultipoleEmbedder_script.h b/graphics/pgf/base/source/FastMultipoleEmbedder_script.h deleted file mode 100644 index 38d9b032c9..0000000000 --- a/graphics/pgf/base/source/FastMultipoleEmbedder_script.h +++ /dev/null @@ -1,51 +0,0 @@ -#include -#include - -struct FastMultipoleEmbedder_script : - scripting::declarations, - scripting::factory -{ - ogdf::FastMultipoleEmbedder* make (scripting::run_parameters* parameters) { - using namespace ogdf; - FastMultipoleEmbedder* r = new FastMultipoleEmbedder; - - parameters->configure_option ("FastMultipoleEmbedder.numIterations", - &FastMultipoleEmbedder::setNumIterations, *r); - parameters->configure_option ("FastMultipoleEmbedder.multipolePrec", - &FastMultipoleEmbedder::setMultipolePrec, *r); - parameters->configure_option ("FastMultipoleEmbedder.defaultEdgeLength", - &FastMultipoleEmbedder::setDefaultEdgeLength, *r); - parameters->configure_option ("FastMultipoleEmbedder.defaultNodeSize", - &FastMultipoleEmbedder::setDefaultNodeSize, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("FastMultipoleEmbedder") - .set_module ("LayoutModule", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.FastMultipoleEmbedder")); - - s.declare (key ("FastMultipoleEmbedder.numIterations") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.FastMultipoleEmbedder")); - - s.declare (key ("FastMultipoleEmbedder.multipolePrec") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.FastMultipoleEmbedder")); - - s.declare (key ("FastMultipoleEmbedder.defaultEdgeLength") - .type ("length") - .alias_function ("function (o) return o['node pre sep'] + o['node post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.energybased.FastMultipoleEmbedder")); - - s.declare (key ("FastMultipoleEmbedder.defaultNodeSize") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.FastMultipoleEmbedder")); - - } - -}; diff --git a/graphics/pgf/base/source/FastSimpleHierarchyLayout_script.h b/graphics/pgf/base/source/FastSimpleHierarchyLayout_script.h deleted file mode 100644 index 37c6c94bc0..0000000000 --- a/graphics/pgf/base/source/FastSimpleHierarchyLayout_script.h +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -struct FastSimpleHierarchyLayout_script : - scripting::declarations, - scripting::factory -{ - - ogdf::FastSimpleHierarchyLayout* make (scripting::run_parameters* parameters) { - using namespace ogdf; - - FastSimpleHierarchyLayout* r = new FastSimpleHierarchyLayout - ( - parameters->option ("FastSimpleHierarchyLayout.siblingDistance"), - parameters->option ("FastSimpleHierarchyLayout.layerDistance") - ); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("FastSimpleHierarchyLayout") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastSimpleHierarchyLayout") - .set_module ("HierarchyLayoutModule", this)); - - s.declare (key ("FastSimpleHierarchyLayout.layerDistance") - .type ("length") - .alias ("level distance") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastSimpleHierarchyLayout")); - - s.declare (key ("FastSimpleHierarchyLayout.siblingDistance") - .type ("length") - .alias ("sibling distance") - .documentation_in ("pgf.gd.doc.ogdf.layered.FastSimpleHierarchyLayout")); - } -}; - - diff --git a/graphics/pgf/base/source/GEMLayout_script.h b/graphics/pgf/base/source/GEMLayout_script.h deleted file mode 100644 index 7b4fda7e68..0000000000 --- a/graphics/pgf/base/source/GEMLayout_script.h +++ /dev/null @@ -1,101 +0,0 @@ -#include -#include - -struct GEMLayout_script : - scripting::declarations, - scripting::factory -{ - ogdf::GEMLayout* make (scripting::run_parameters* parameters) { - using namespace ogdf; - GEMLayout* r = new GEMLayout; - - parameters->configure_option ("GEMLayout.numberOfRounds", - &GEMLayout::numberOfRounds, *r); - parameters->configure_option ("GEMLayout.minimalTemperature", - &GEMLayout::minimalTemperature, *r); - parameters->configure_option ("GEMLayout.initialTemperature", - &GEMLayout::initialTemperature, *r); - parameters->configure_option ("GEMLayout.gravitationalConstant", - &GEMLayout::gravitationalConstant, *r); - parameters->configure_option ("GEMLayout.desiredLength", - &GEMLayout::desiredLength, *r); - parameters->configure_option ("GEMLayout.maximalDisturbance", - &GEMLayout::maximalDisturbance, *r); - parameters->configure_option ("GEMLayout.rotationAngle", - &GEMLayout::rotationAngle, *r); - parameters->configure_option ("GEMLayout.oscillationAngle", - &GEMLayout::oscillationAngle, *r); - parameters->configure_option ("GEMLayout.rotationSensitivity", - &GEMLayout::rotationSensitivity, *r); - parameters->configure_option ("GEMLayout.oscillationSensitivity", - &GEMLayout::oscillationSensitivity, *r); - parameters->configure_option ("GEMLayout.attractionFormula", - &GEMLayout::attractionFormula, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("GEMLayout") - .set_module ("LayoutModule", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.numberOfRounds") - .type ("number") - .initial ("20000") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.minimalTemperature") - .type ("number") - .initial ("0.005") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.initialTemperature") - .type ("number") - .initial ("10") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.gravitationalConstant") - .type ("number") - .initial ("0.0625") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.desiredLength") - .type ("length") - .alias_function ("function (o) return o['node pre sep'] + o['node post sep'] end") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.maximalDisturbance") - .type ("number") - .initial ("0") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.rotationAngle") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.oscillationAngle") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.rotationSensitivity") - .type ("number") - .initial ("0.01") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.oscillationSensitivity") - .type ("number") - .initial ("0.3") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - s.declare (key ("GEMLayout.attractionFormula") - .type ("number") - .initial ("1") - .documentation_in ("pgf.gd.doc.ogdf.energybased.GEMLayout")); - - } - -}; diff --git a/graphics/pgf/base/source/GreedyCycleRemoval_script.h b/graphics/pgf/base/source/GreedyCycleRemoval_script.h deleted file mode 100644 index 7461698141..0000000000 --- a/graphics/pgf/base/source/GreedyCycleRemoval_script.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -struct GreedyCycleRemoval_script : - scripting::declarations, - scripting::factory -{ - - ogdf::GreedyCycleRemoval* make (scripting::run_parameters* parameters) { - return new ogdf::GreedyCycleRemoval; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("GreedyCycleRemoval") - .documentation_in ("pgf.gd.doc.ogdf.layered.GreedyCycleRemoval") - .set_module ("AcyclicSubgraphModule", this)); - } -}; - diff --git a/graphics/pgf/base/source/GreedyInsertHeuristic_script.h b/graphics/pgf/base/source/GreedyInsertHeuristic_script.h deleted file mode 100644 index 4ab2675b5a..0000000000 --- a/graphics/pgf/base/source/GreedyInsertHeuristic_script.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -struct GreedyInsertHeuristic_script : - scripting::declarations, - scripting::factory -{ - - ogdf::GreedyInsertHeuristic* make (scripting::run_parameters* parameters) { - return new ogdf::GreedyInsertHeuristic; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("GreedyInsertHeuristic") - .documentation_in ("pgf.gd.doc.ogdf.layered.GreedyInsertHeuristic") - .set_module ("TwoLayerCrossMin", this)); - } -}; - diff --git a/graphics/pgf/base/source/INSTALL b/graphics/pgf/base/source/INSTALL deleted file mode 100644 index 0690faba7d..0000000000 --- a/graphics/pgf/base/source/INSTALL +++ /dev/null @@ -1,28 +0,0 @@ -In order to use the C code in these directories, you should first -modify / setup the file config/LocalMakefileConfig.mk, which is -included by the main Makefiles and allows you to overwrite the -settings from config/Makefile.mk. - -Once this is done, run make. - -You must then use the install targets to copy / link the resulting -shared libraries with their full paths into the "luatex/lib" -subdirectory of the directory where your TeX executable resides. For -instance, if the luatex program is in - -/usr/texbin - -then you would put SimpleDemoC.so into - -/usr/texbin/lib/luatex/lua/pgf/gd/examples/c - - -Due to bugs in the LuaTeX code, you currently need to append the paths -of the libraries to their name as done in the Makefiles. - -Note that, currently, the Makefile will link the Lua library -statically into the shared graph drawing library (at least on -MacOS). This is conceptually wrong and, indeed, a lot of effort was -need to avoid having LuaTeX crash on a TeX run because of two Lua -libraries being used simultaneously. It works, but hopefully, in the -fututure, this will be fixed. \ No newline at end of file diff --git a/graphics/pgf/base/source/IndependentSetMerger_script.h b/graphics/pgf/base/source/IndependentSetMerger_script.h deleted file mode 100644 index 2d950f8b9c..0000000000 --- a/graphics/pgf/base/source/IndependentSetMerger_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct IndependentSetMerger_script : - scripting::declarations, - scripting::factory -{ - ogdf::IndependentSetMerger* make (scripting::run_parameters* parameters) { - using namespace ogdf; - IndependentSetMerger* r = new IndependentSetMerger; - - parameters->configure_option ("IndependentSetMerger.searchDepthBase", - &IndependentSetMerger::setSearchDepthBase, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("IndependentSetMerger") - .set_module ("MultilevelBuilder", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.IndependentSetMerger")); - - s.declare (key ("IndependentSetMerger.searchDepthBase") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.IndependentSetMerger")); - - } - -}; diff --git a/graphics/pgf/base/source/InterfaceFromC++.c++ b/graphics/pgf/base/source/InterfaceFromC++.c++ deleted file mode 100644 index 11c1f99dee..0000000000 --- a/graphics/pgf/base/source/InterfaceFromC++.c++ +++ /dev/null @@ -1,215 +0,0 @@ - -// Own header: -#include - -extern "C" { - -// Own C header: -#include - -// Lua stuff: -#include - -} - - -namespace { - - void cpp_caller(pgfgd_SyntacticDigraph* g, void* f) - { - using namespace scripting; - - run_parameters p; - p.syntactic_digraph = g; - - runner* algo = static_cast (f); - - algo->prepare(&p); - algo->bridge(); - algo->run(); - algo->unbridge(); - } - -} - - -namespace scripting { - - // The key class - - key::key(const char* key) : d (pgfgd_new_key(key)) {} - key::key(struct pgfgd_Declaration* dec) : d (dec) {} - key::~key() {pgfgd_free_key(d); } - - const key& key::summary (const char* x) const { - pgfgd_key_summary(d, x); - return *this; - } - - const key& key::initial (const char* x) const { - pgfgd_key_initial(d, x); - return *this; - } - - const key& key::initial (factory_base* fac) const { - pgfgd_key_initial_user(d, static_cast(fac)); - return *this; - } - - const key& key::type (const char* x) const { - pgfgd_key_type(d, x); - return *this; - } - - const key& key::module_type () const { - pgfgd_key_type(d, "user value"); - return *this; - } - - const key& key::default_value (const char* x) const { - pgfgd_key_default(d, x); - return *this; - } - - const key& key::alias (const char* x) const { - pgfgd_key_alias(d, x); - return *this; - } - - const key& key::alias_function (const char* x) const { - pgfgd_key_alias_function(d, x); - return *this; - } - - const key& key::documentation (const char* x) const { - pgfgd_key_documentation(d, x); - return *this; - } - - const key& key::documentation_in (const char* x) const { - pgfgd_key_documentation_in(d, x); - return *this; - } - - const key& key::phase (const char* x) const { - pgfgd_key_phase(d, x); - return *this; - } - - const key& key::set_key (const char* k, const char* v) const { - pgfgd_key_add_use(d, k, v); - return *this; - } - - const key& key::set_module (const char* k, factory_base* fac) const { - pgfgd_key_add_use_user(d, k, static_cast(fac)); - return *this; - } - - const key& key::example (const char* x) const { - pgfgd_key_add_example(d, x); - return *this; - } - - const key& key::precondition (const char* x) const { - pgfgd_key_add_precondition(d, x); - return *this; - } - - const key& key::postcondition (const char* x) const { - pgfgd_key_add_postcondition(d, x); - return *this; - } - - const key& key::algorithm (runner* a) const { - pgfgd_key_algorithm(d, cpp_caller, static_cast(a)); - return *this; - } - - - // The script class - - script::script (struct lua_State* s) : state(s) {} - - void script::declare (const key& k) { - pgfgd_declare(state, k.d); - } - - void script::declare (declarations* d) { - d->declare(*this); - } - - void script::declare (declarations& d) { - d.declare(*this); - } - - - // The run_parameters class - - namespace { - - // Helpers: - template - bool fromnumber (pgfgd_SyntacticDigraph* g, const char* k, T& t) - { - if (pgfgd_isnumber(g->options, k)) { - t = static_cast(pgfgd_tonumber(g->options, k)); - return true; - } - return false; - } - - }; - - template <> bool run_parameters::option (const char* k, bool& t) - { - if (pgfgd_isboolean(syntactic_digraph->options, k)) { - t = static_cast(pgfgd_toboolean(syntactic_digraph->options, k)); - return true; - } - return false; - } - - template <> bool run_parameters::option (const char* k, char*& t) - { - if (pgfgd_isstring(syntactic_digraph->options, k)) { - t = pgfgd_tostring(syntactic_digraph->options, k); - return true; - } - return false; - } - - template <> bool run_parameters::option (const char* k, short& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, unsigned short& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, int& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, unsigned int& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, long& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, unsigned long& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, float& t) - { return fromnumber (syntactic_digraph, k, t); } - - template <> bool run_parameters::option (const char* k, double& t) - { return fromnumber (syntactic_digraph, k, t); } - - void* run_parameters::invoke_void_factory_for (const char* k) - { - if (pgfgd_isuser (syntactic_digraph->options, k)) { - factory_base* user = static_cast(pgfgd_touser (syntactic_digraph->options, k)); - return user->make_void(this); - } - return 0; - } - -} diff --git a/graphics/pgf/base/source/InterfaceFromC++.h b/graphics/pgf/base/source/InterfaceFromC++.h deleted file mode 100644 index 40cccb7884..0000000000 --- a/graphics/pgf/base/source/InterfaceFromC++.h +++ /dev/null @@ -1,190 +0,0 @@ -#ifndef PGF_GD_INTERFACE_C_INTERFACEFROMCPP_H -#define PGF_GD_INTERFACE_C_INTERFACEFROMCPP_H - -/** \file pgf/gd/interface/c/InterfaceFromC++.h - - The C++-header file that should be used by algorithms written - in C++ for graph drawing in Lua. -*/ - - -struct lua_State; -struct pgfgd_Declaration; -struct pgfgd_SyntacticDigraph; - -namespace scripting { - - // Forward; - class script; - class run_parameters; - - - class runner { - public: - - void prepare (run_parameters* p) { parameters = p; } - - virtual void bridge () {} - virtual void run () = 0; - virtual void unbridge () {} - - virtual ~runner () {} - - protected: - - run_parameters* parameters; - - }; - - class factory_base { - public: - virtual void* make_void (run_parameters*) = 0; - virtual ~factory_base () {} - }; - - template class factory : public factory_base { - virtual void* make_void (run_parameters*r) { return static_cast(make(r)); } - virtual T* make (run_parameters*) { return new T(); } - }; - - class key { - public: - - key (const char*); - key (struct pgfgd_Declaration*); - ~key (); - - const key& summary (const char*) const; - const key& initial (const char*) const; - const key& initial (factory_base*) const; - const key& type (const char*) const; - const key& module_type () const; - const key& default_value (const char*) const; - const key& alias (const char*) const; - const key& alias_function (const char*) const; - const key& documentation (const char*) const; - const key& documentation_in (const char*) const; - const key& phase (const char*) const; - const key& set_key (const char*, const char*) const; - const key& set_module (const char*, factory_base*) const; - const key& example (const char*) const; - const key& precondition (const char*) const; - const key& postcondition (const char*) const; - const key& algorithm (runner*) const; - - private: - - struct pgfgd_Declaration* d; - friend class script; - - key (const key& k); // Not implemented. - key& operator = (const key& k); // Not implemented. - - }; - - - // Declarations are useful for scripting: - - class declarations { - - public: - - virtual void declare (script) = 0; - virtual ~declarations () {} - - }; - - - // The script class - - class script { - - public: - - script (struct lua_State*); - - // Declares a key - void declare (const key&); - void declare (declarations&); - void declare (declarations*); - - private: - - struct lua_State* state; - - }; - - - - // Declaring algorithms defined in a function - - class function_runner : public runner { - public: - function_runner (void (*f) (run_parameters&)) : fun(f) {} - virtual void run () { fun(*parameters); } - - private: - void (*fun) (run_parameters&); - }; - - - // Configuring a class - - class run_parameters { - public: - - struct pgfgd_SyntacticDigraph* syntactic_digraph; - - template - void configure_option (const char*, void (Layout::*) (T), Layout&); - - template - void configure_module (const char*, void (Layout::*) (T*), Layout&); - - template bool option (const char*, T&); - template T option (const char*); - template bool option_is_set (const char*); - - template T* make (const char*); - - protected: - void* invoke_void_factory_for (const char*); - }; - - template - T run_parameters::option (const char* k) - { - T t; - option (k, t); - return t; - } - - template - bool run_parameters::option_is_set (const char* k) - { - T t; - return option(k, t); - } - - template - void run_parameters::configure_option (const char* k, void (Layout::*f) (T), Layout& l) - { - T t; - if (option (k, t)) - (l.*f) (t); - } - - template - void run_parameters::configure_module (const char* k, void (Layout::*f) (T*), Layout& l) - { - if (void* obj = invoke_void_factory_for(k)) - (l.*f) (static_cast (obj)); - } - - template - T* run_parameters::make (const char* k) { return static_cast(invoke_void_factory_for(k)); } - -} - - -#endif diff --git a/graphics/pgf/base/source/InterfaceFromC.c b/graphics/pgf/base/source/InterfaceFromC.c deleted file mode 100644 index b5606f2f39..0000000000 --- a/graphics/pgf/base/source/InterfaceFromC.c +++ /dev/null @@ -1,1189 +0,0 @@ - -// Own header: -#include - -// Lua stuff: -#include - -// C stuff: -#include -#include - - -// Remove once Lua Link Bug is fixed: -// -// The following is a hack to avoid a problem with the Lua lib being linked twice. -// When this happens, two version of "dummynode" exist in Lua and we must ensure that -// we never create a table using such a dummynode while using a second lib. -// The following should later be set to 0 and replaced everywhere, once this is fixed. -#define MIN_HASH_SIZE_FIX 1 - - - -// Help functions - -static void set_field (lua_State* L, const char* what, const char* where) -{ - if (what) { - lua_pushstring(L, what); - lua_setfield(L, -2, where); - } -} - - -static void init_vertex_array(pgfgd_Vertex_array* a, int count) -{ - a->length = count; - a->array = (pgfgd_Vertex**) calloc(count, sizeof(pgfgd_Vertex*)); -} - -static void init_edge_array(pgfgd_Edge_array* a, int count) -{ - a->length = count; - a->array = (pgfgd_Edge**) calloc(count, sizeof(pgfgd_Edge*)); -} - -static void init_arcs_array(pgfgd_Arc_array* arcs, int length) -{ - arcs->length = length; - arcs->tails = (int*) calloc(length, sizeof(int)); - arcs->heads = (int*) calloc(length, sizeof(int)); -} - -static void init_path(pgfgd_Path* a, int count) -{ - a->length = count; - a->coordinates = (pgfgd_Coordinate*) calloc(count, sizeof(pgfgd_Coordinate)); - a->strings = (char**) calloc(count, sizeof(char*)); -} - -static void clear_path(pgfgd_Path* p) -{ - int i; - for (i=0; i < p->length; i++) - free(p->strings[i]); - - free(p->strings); - free(p->coordinates); - - p->length = 0; - p->strings = 0; - p->coordinates = 0; -} - - - -// Option handling - -struct pgfgd_OptionTable { - lua_State* state; - - int kind; - int index; -}; - -// These are the indices of the parameters during a run of the main -// algorithm: -#define GRAPH_INDEX 1 -#define VERTICES_INDEX 2 -#define EDGES_INDEX 3 -#define ALGORITHM_INDEX 4 - -// This is the index of a special table mapping vertices back to the -// index they have. It is created in the C code, but stays on the -// stack during the computations. -#define BACKINDEX_STORAGE_INDEX 5 - -// These are the positions of different upvalues for the C closure of -// a C algorithm. -#define FUNCTION_UPVALUE 1 -#define USER_UPVALUE 2 -#define DIGRAPH_OBJECT_UPVALUE 3 - - -static pgfgd_OptionTable* make_option_table(lua_State* L, int kind, int index) -{ - pgfgd_OptionTable* t = (pgfgd_OptionTable*) malloc(sizeof(pgfgd_OptionTable)); - - t->state = L; - t->kind = kind; - t->index = index; - - return t; -} - -static void push_option_table(pgfgd_OptionTable* t) -{ - switch (t->kind) { - case GRAPH_INDEX: - lua_getfield(t->state, GRAPH_INDEX, "options"); - break; - case VERTICES_INDEX: - lua_rawgeti(t->state, VERTICES_INDEX, t->index); - lua_getfield(t->state, -1, "options"); - lua_replace(t->state, -2); - break; - case EDGES_INDEX: - lua_rawgeti(t->state, EDGES_INDEX, t->index); - lua_getfield(t->state, -1, "options"); - lua_replace(t->state, -2); - break; - } -} - -int pgfgd_isset(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - int is_nil = lua_isnil(t->state, -1); - lua_pop(t->state, 2); - return !is_nil; -} - -int pgfgd_isnumber(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - int is_number = lua_isnumber(t->state, -1); - lua_pop(t->state, 2); - return is_number; -} - -int pgfgd_isboolean(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - int is_bool = lua_isboolean(t->state, -1); - lua_pop(t->state, 2); - return is_bool; -} - -int pgfgd_isstring(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - int is_string = lua_isstring(t->state, -1); - lua_pop(t->state, 2); - return is_string; -} - -int pgfgd_isuser(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - int is_user = lua_isuserdata(t->state, -1); - lua_pop(t->state, 2); - return is_user; -} - - -double pgfgd_tonumber(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - double d = lua_tonumber(t->state, -1); - lua_pop(t->state, 2); - return d; -} - -int pgfgd_toboolean(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - int d = lua_toboolean(t->state, -1); - lua_pop(t->state, 2); - return d; -} - -char* pgfgd_tostring(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - const char* s = lua_tostring(t->state, -1); - char* copy = strcpy((char*) malloc(strlen(s)+1), s); - lua_pop(t->state, 2); - return copy; -} - -void* pgfgd_touser(pgfgd_OptionTable* t, const char* key) -{ - push_option_table(t); - lua_getfield(t->state, -1, key); - void* d = lua_touserdata(t->state, -1); - lua_pop(t->state, 2); - return d; -} - - -// Handling algorithms - -struct pgfgd_SyntacticDigraph_internals { - lua_State* state; -}; - -static char* make_string_from(lua_State* L, const char* name) -{ - lua_getfield(L, -1, name); - if (lua_isnil(L, -1)) { - // Field not set; return emtpy string. - lua_pop(L, 1); - return (char*) calloc(1, sizeof(char)); - } - else { - const char* s = lua_tostring(L, -1); - char* copy = strcpy((char*) malloc(strlen(s)+1), s); - lua_pop(L, 1); - return copy; - } -} - -static void make_coordinate(lua_State* L, pgfgd_Coordinate* c) -{ - lua_getfield(L, -1, "x"); - c->x = lua_tonumber(L, -1); - lua_pop(L, 1); - - lua_getfield(L, -1, "y"); - c->y = lua_tonumber(L, -1); - lua_pop(L, 1); -} - -static pgfgd_Path* make_empty_path(lua_State* L) -{ - return (pgfgd_Path*) calloc(1, sizeof(pgfgd_Path)); -} - -static pgfgd_Path* make_path(lua_State* L) -{ - /* Path object must be on top of stack. */ - pgfgd_Path* p = make_empty_path(L); - - // Fill path: - int path_length = lua_rawlen(L, -1); - if (path_length > 0) { - init_path(p, path_length); - int i; - for (i = 0; i < path_length; i++) { - lua_rawgeti(L, -1, i+1); - if (lua_isstring(L, -1)) { - const char* s = lua_tostring(L, -1); - p->strings[i] = strcpy((char*) malloc(strlen(s)+1), s); - } else { - lua_getfield(L, -1, "x"); - p->coordinates[i].x = lua_tonumber(L, -1); - lua_pop(L, 1); - - lua_getfield(L, -1, "y"); - p->coordinates[i].y = lua_tonumber(L, -1); - lua_pop(L, 1); - } - lua_pop(L, 1); - } - } - - return p; -} - -static void construct_digraph(lua_State* L, pgfgd_SyntacticDigraph* d) -{ - d->internals = (pgfgd_SyntacticDigraph_internals*) calloc(1, sizeof(pgfgd_SyntacticDigraph_internals)); - d->internals->state = L; - - // Create the options table: - d->options = make_option_table(L, GRAPH_INDEX, 0); - - // Create the vertex table - init_vertex_array(&d->vertices, lua_rawlen(L, VERTICES_INDEX)); - - // Create the vertices - int i; - for (i=0; ivertices.length; i++) { - pgfgd_Vertex* v = (pgfgd_Vertex*) calloc(1, sizeof(pgfgd_Vertex)); - - // Push the vertex onto the Lua stack: - lua_rawgeti(L, VERTICES_INDEX, i+1); - - // Fill v with information: - v->name = make_string_from(L, "name"); - v->shape = make_string_from(L, "shape"); - v->kind = make_string_from(L, "kind"); - - // Options: - v->options = make_option_table(L, VERTICES_INDEX, i+1); - - // Index: - v->array_index = i; - - // Setup pos field - lua_getfield(L, -1, "pos"); - make_coordinate(L, &v->pos); - lua_pop(L, 1); - - // Setup path array: - lua_getfield(L, -1, "path"); - v->path = make_path(L); - lua_pop(L, 1); - - // Pop the vertex - lua_pop(L, 1); - - d->vertices.array[i] = v; - } - - // Construct the edges: - init_edge_array(&d->syntactic_edges, lua_rawlen(L, EDGES_INDEX)); - - int edge_index; - for (edge_index = 0; edge_index < d->syntactic_edges.length; edge_index++) { - pgfgd_Edge* e = (pgfgd_Edge*) calloc(1, sizeof(pgfgd_Edge)); - - lua_rawgeti(L, EDGES_INDEX, edge_index+1); - - e->direction = make_string_from(L, "direction"); - e->options = make_option_table(L, EDGES_INDEX, edge_index+1); - - // Index: - e->array_index = edge_index; - - // Compute the tail vertex index: - lua_getfield(L, -1, "tail"); - lua_gettable(L, VERTICES_INDEX); - e->tail = d->vertices.array[lua_tointeger(L, -1) - 1]; - lua_pop(L, 1); - - lua_getfield(L, -1, "head"); - lua_gettable(L, VERTICES_INDEX); - e->head = d->vertices.array[lua_tointeger(L, -1) - 1]; - lua_pop(L, 1); - - // Fill path: - e->path = make_empty_path(L); - e->path->length = -1; // Means that a default path should be created. - - // Pop the edge form the Lua stack: - lua_pop(L, 1); - - d->syntactic_edges.array[edge_index] = e; - } -} - - -static void sync_digraph(lua_State* L, pgfgd_SyntacticDigraph* d) -{ - // Writes back the computed position information to the digraph: - int i; - for (i=0; ivertices.length; i++) { - - // Push pos field of vertex: - lua_rawgeti(L, VERTICES_INDEX, i+1); - lua_getfield(L, -1, "pos"); - - // Set x and y coordinates: - pgfgd_Vertex* v = d->vertices.array[i]; - lua_pushnumber(L, v->pos.x); - lua_setfield(L, -2, "x"); - lua_pushnumber(L, v->pos.y); - lua_setfield(L, -2, "y"); - - // pop pos and vertex - lua_pop(L, 2); - } - - // Write back the paths - - int tos = lua_gettop(L); - - // First, get "Coordinate.new" as a "local" - lua_getglobal(L, "require"); - lua_pushstring(L, "pgf.gd.model.Path"); - lua_call(L, 1, 1); - int Path_index = lua_gettop(L); - - lua_getglobal(L, "require"); - lua_pushstring(L, "pgf.gd.model.Coordinate"); - lua_call(L, 1, 1); - lua_getfield(L, -1, "new"); - - int Coordinate_new_index = lua_gettop(L); - - for (i=0; i < d->syntactic_edges.length; i++) { - pgfgd_Edge* e = d->syntactic_edges.array[i]; - - lua_rawgeti(L, EDGES_INDEX, i+1); - - if (e->path->length == -1) { - // Create default path - pgfgd_path_append_moveto_tail(e); - pgfgd_path_append_lineto_head(e); - } - - lua_createtable(L, e->path->length ? e->path->length : 1, MIN_HASH_SIZE_FIX); - lua_pushvalue(L, Path_index); - lua_setmetatable(L, -2); - - int j; - for (j=0; jpath->length; j++) { - if (e->path->strings[j]) { - lua_pushstring(L, e->path->strings[j]); - lua_rawseti(L, -2, j+1); - } else { - lua_pushvalue(L, Coordinate_new_index); - lua_pushnumber(L, e->path->coordinates[j].x); - lua_pushnumber(L, e->path->coordinates[j].y); - lua_call(L, 2, 1); - - lua_rawseti(L, -2, j+1); - } - } - - lua_setfield(L, -2, "path"); - lua_pop(L, 1); // The edge object - } - - lua_settop(L, tos); // Cleanup -} - - -static void free_digraph(pgfgd_SyntacticDigraph* digraph) -{ - int i; - for (i=0; i < digraph->vertices.length; i++) { - pgfgd_Vertex* v = digraph->vertices.array[i]; - - clear_path(v->path); - free(v->path); - free(v->name); - free(v->shape); - free(v->kind); - free(v->options); - free(v->incoming.array); - free(v->outgoing.array); - free(v); - } - - for (i=0; i < digraph->syntactic_edges.length; i++) { - pgfgd_Edge* e = digraph->syntactic_edges.array[i]; - - clear_path(e->path); - free(e->path); - free(e->direction); - free(e->options); - free(e); - } - - free(digraph->vertices.array); - free(digraph->syntactic_edges.array); - free(digraph->options); - free(digraph->internals); - free(digraph); -} - -static int algorithm_dispatcher(lua_State* L) -{ - // Create the back index table. It will be at index BACKINDEX_STORAGE_INDEX - lua_createtable(L, 0, MIN_HASH_SIZE_FIX); - - // The actual function is stored in an upvalue. - pgfgd_SyntacticDigraph* digraph = (pgfgd_SyntacticDigraph*) calloc(1, sizeof(pgfgd_SyntacticDigraph)); - - construct_digraph(L, digraph); - - pgfgd_algorithm_fun fun = lua_touserdata(L, lua_upvalueindex(FUNCTION_UPVALUE)); - fun(digraph, lua_touserdata(L, lua_upvalueindex(USER_UPVALUE))); - - sync_digraph(L, digraph); - - free_digraph(digraph); - - return 0; -} - - -int pgfgd_vertex_anchor(pgfgd_Vertex* v, const char* anchor, double* x, double* y) -{ - lua_State* L = v->options->state; - - // Ok, first, find the vertex: - lua_rawgeti(L, VERTICES_INDEX, v->array_index+1); - - // Find the anchor function: - lua_getfield(L, -1, "anchor"); - lua_pushvalue(L, -2); - lua_pushstring(L, anchor); - - // Find the anchor: - lua_call(L, 2, 1); - - if (lua_isnil(L, -1)) { - // Failed. Cleanup! - lua_pop(L, 2); - *x = 0; - *y = 0; - return 0; - } else { - lua_getfield(L, -1, "x"); - *x = lua_tonumber(L, -1); - lua_pop(L, 1); - - lua_getfield(L, -1, "y"); - *y = lua_tonumber(L, -1); - lua_pop(L, 1); - - lua_pop(L, 2); - return 1; - } - return 0; -} - - - -void pgfgd_path_clear(pgfgd_Edge* e) -{ - clear_path (e->path); -} - -static void path_add_segment(pgfgd_Edge* edge, const char* s, int num, double a, double b, double c, double d, double e, double f) -{ - if (edge->path->length == -1) - pgfgd_path_clear(edge); - - int start = edge->path->length; - - edge->path->length += num + 1; - edge->path->strings = (char **) - realloc(edge->path->strings, edge->path->length*sizeof(char*)); - edge->path->coordinates = (pgfgd_Coordinate*) - realloc(edge->path->coordinates, edge->path->length*sizeof(pgfgd_Coordinate)); - - edge->path->coordinates[start].x = 0; - edge->path->coordinates[start].y = 0; - edge->path->strings[start] = strcpy((char*) malloc(strlen(s)+1), s); - - if (num > 0) { - edge->path->coordinates[start+1].x = a; - edge->path->coordinates[start+1].y = b; - edge->path->strings[start+1] = 0; - } - - if (num > 1) { - edge->path->coordinates[start+2].x = c; - edge->path->coordinates[start+2].y = d; - edge->path->strings[start+2] = 0; - } - - if (num > 2) { - edge->path->coordinates[start+3].x = e; - edge->path->coordinates[start+3].y = f; - edge->path->strings[start+3] = 0; - } -} - - -void pgfgd_path_append_moveto(pgfgd_Edge* e, double x, double y) -{ - path_add_segment(e, "moveto", 1, x, y, 0, 0, 0, 0); -} - -void pgfgd_path_append_moveto_tail (pgfgd_Edge* e) -{ - double x, y; - char* tail_anchor = pgfgd_tostring(e->tail->options, "tail anchor"); - - pgfgd_vertex_anchor(e->tail, tail_anchor, &x, &y); - x += e->tail->pos.x; - y += e->tail->pos.y; - - pgfgd_path_append_moveto(e, x, y); - free(tail_anchor); -} - -void pgfgd_path_append_lineto(pgfgd_Edge* e, double x, double y) -{ - path_add_segment(e, "lineto", 1, x, y, 0, 0, 0, 0); -} - -void pgfgd_path_append_lineto_head (pgfgd_Edge* e) -{ - double x, y; - char* head_anchor = pgfgd_tostring(e->head->options, "head anchor"); - - pgfgd_vertex_anchor(e->head, head_anchor, &x, &y); - x += e->head->pos.x; - y += e->head->pos.y; - - pgfgd_path_append_lineto(e, x, y); - free(head_anchor); -} - -void pgfgd_path_append_curveto(pgfgd_Edge* edge, double a, double b, double c, double d, double e, double f) -{ - path_add_segment(edge, "curveto", 3, a, b, c, d, e, f); -} - -void pgfgd_path_append_closepath(pgfgd_Edge* e) -{ - path_add_segment(e, "closepath", 0, 0, 0, 0, 0, 0, 0); -} - - - -// Handling digraphs - -struct pgfgd_Digraph { - lua_State* state; - const char* name; - pgfgd_SyntacticDigraph* syntactic_digraph; -}; - - -pgfgd_Digraph* pgfgd_get_digraph (pgfgd_SyntacticDigraph* g, const char* graph_name) -{ - lua_State* L = g->internals->state; - - lua_getfield(L, ALGORITHM_INDEX, graph_name); - if (lua_isnil(L, -1)) - luaL_error(L, "digraph named %s not found in algorithm class", graph_name); - lua_pop(L, 1); - - pgfgd_Digraph* new = (pgfgd_Digraph*) calloc(1, sizeof(pgfgd_Digraph)); - - new->state = L; - new->name = graph_name; - new->syntactic_digraph = g; - - return new; -} - -int pgfgd_digraph_num_vertices (pgfgd_Digraph* g) -{ - lua_getfield(g->state, ALGORITHM_INDEX, g->name); - lua_getfield(g->state, -1, "vertices"); - int num = lua_rawlen(g->state, -1); - lua_pop(g->state, 2); - - return num; -} - -static void push_digraph_and_backindex(pgfgd_Digraph* g) -{ - lua_State* L = g->state; - - // Get digraph - lua_getfield(L, ALGORITHM_INDEX, g->name); - int digraph_pos = lua_gettop(L); - - // Get entry in back index table - lua_pushvalue(L, digraph_pos); - lua_gettable(L, BACKINDEX_STORAGE_INDEX); - int backtable_pos = lua_gettop(L); - if (lua_isnil(L, backtable_pos)) { - // Aha. We need to install a new table: - lua_pop(L, 1); // Get rid of nil - - lua_createtable(L, 0, MIN_HASH_SIZE_FIX); - - lua_pushvalue(L, digraph_pos); // The digraph object - lua_pushvalue(L, backtable_pos); // The new table - lua_settable(L, BACKINDEX_STORAGE_INDEX); - - // Fill the table: - lua_getfield(L, digraph_pos, "vertices"); - int vertex_pos = lua_gettop(L); - int i; - int n = lua_rawlen(L, -1); - for (i = 1; i <= n; i++) { - lua_rawgeti(L, vertex_pos, i); - lua_pushinteger(L, i); - lua_settable(L, backtable_pos); - } - lua_pop(L, 1); - } -} - -static pgfgd_Arc_array* build_c_array_of_arcs_from_lua_array_of_arcs(pgfgd_Digraph* g) -{ - lua_State* L = g->state; - - pgfgd_Arc_array* arcs = (pgfgd_Arc_array*) calloc(1, sizeof(pgfgd_Arc_array)); - - int array_pos = lua_gettop(L); - - push_digraph_and_backindex(g); - int backtable_pos = lua_gettop(L); - - // Get number of arcs: - init_arcs_array(arcs, lua_rawlen(L, array_pos)); - int i; - for (i = 1; i<=arcs->length; i++) { - lua_rawgeti(L, array_pos, i); // Get arcs[i] - - // The tail field: - lua_getfield(L, -1, "tail"); - lua_gettable(L, backtable_pos); - - arcs->tails[i-1] = lua_tointeger(L, -1); - lua_pop(L, 1); // The number - - // The head field: - lua_getfield(L, -1, "head"); - lua_gettable(L, backtable_pos); - arcs->heads[i-1] = lua_tointeger(L, -1); - lua_pop(L, 1); // The number - - lua_pop(L, 1); // Pop arcs[i] - } - - lua_settop(L, array_pos); - - return arcs; -} - - -pgfgd_Arc_array* pgfgd_digraph_arcs (pgfgd_Digraph* g) -{ - lua_getfield(g->state, ALGORITHM_INDEX, g->name); - lua_getfield(g->state, -1, "arcs"); - - pgfgd_Arc_array* a = build_c_array_of_arcs_from_lua_array_of_arcs(g); - - lua_pop(g->state, 2); - - return a; -} - - -pgfgd_Vertex* pgfgd_digraph_syntactic_vertex (pgfgd_Digraph* g, int v) -{ - int tos = lua_gettop(g->state); - pgfgd_Vertex* return_me = 0; - - lua_getfield(g->state, ALGORITHM_INDEX, g->name); - lua_getfield(g->state, -1, "vertices"); - lua_rawgeti(g->state, -1, v); - - lua_gettable(g->state, VERTICES_INDEX); - if (lua_isnumber(g->state, -1)) { - return_me = g->syntactic_digraph->vertices.array[lua_tointeger(g->state, -1)-1]; - } - - lua_settop(g->state, tos); - return return_me; -} - - -int pgfgd_digraph_isarc (pgfgd_Digraph* g, int tail, int head) -{ - lua_State* L = g->state; - int is_arc = 0; - - lua_getfield(L, ALGORITHM_INDEX, g->name); - int digraph_pos = lua_gettop(L); - - lua_getfield(L, digraph_pos, "vertices"); - int vertices_pos = lua_gettop(L); - - // Call digraph:connected(tail, head) - lua_pushvalue(L, lua_upvalueindex(DIGRAPH_OBJECT_UPVALUE)); - lua_getfield(L, -1, "arc"); - lua_pushvalue(L, digraph_pos); - lua_rawgeti(L, vertices_pos, tail); - lua_rawgeti(L, vertices_pos, head); - lua_call(L, 3, 1); - - is_arc = !lua_isnil(L, -1); - - lua_settop(L, digraph_pos-1); - - return is_arc; -} - -pgfgd_Arc_array* pgfgd_digraph_incoming (pgfgd_Digraph* g, int v) -{ - lua_State* L = g->state; - - lua_getfield(L, ALGORITHM_INDEX, g->name); - int digraph_pos = lua_gettop(L); - - lua_getfield(L, digraph_pos, "vertices"); - int vertices_pos = lua_gettop(L); - - // Call digraph:connected(tail, head) - lua_pushvalue(L, lua_upvalueindex(DIGRAPH_OBJECT_UPVALUE)); - lua_getfield(L, -1, "incoming"); - lua_pushvalue(L, digraph_pos); - lua_rawgeti(L, vertices_pos, v); - lua_call(L, 2, 1); - - pgfgd_Arc_array* a = build_c_array_of_arcs_from_lua_array_of_arcs(g); - - lua_settop(L, digraph_pos-1); - - return a; -} - -pgfgd_Arc_array* pgfgd_digraph_outgoing (pgfgd_Digraph* g, int v) -{ - lua_State* L = g->state; - - lua_getfield(L, ALGORITHM_INDEX, g->name); - int digraph_pos = lua_gettop(L); - - lua_getfield(L, digraph_pos, "vertices"); - int vertices_pos = lua_gettop(L); - - // Call digraph:connected(tail, head) - lua_pushvalue(L, lua_upvalueindex(DIGRAPH_OBJECT_UPVALUE)); - lua_getfield(L, -1, "outgoing"); - lua_pushvalue(L, digraph_pos); - lua_rawgeti(L, vertices_pos, v); - lua_call(L, 2, 1); - - pgfgd_Arc_array* a = build_c_array_of_arcs_from_lua_array_of_arcs(g); - - lua_settop(L, digraph_pos-1); - - return a; -} - -pgfgd_Edge_array* pgfgd_digraph_syntactic_edges (pgfgd_Digraph* g, int tail, int head) -{ - pgfgd_Edge_array* edges = (pgfgd_Edge_array*) calloc(1, sizeof(pgfgd_Edge_array)); - - // First, get the arc in the syntatic digraph. - lua_State* L = g->state; - int tos = lua_gettop(L); - - lua_getfield(L, ALGORITHM_INDEX, g->name); - int digraph_pos = lua_gettop(L); - - lua_getfield(L, digraph_pos, "vertices"); - int vertices_pos = lua_gettop(L); - - // Call digraph:arc(tail, head) - lua_pushvalue(L, lua_upvalueindex(DIGRAPH_OBJECT_UPVALUE)); - int digraph_class_index = lua_gettop(L); - - lua_getfield(L, digraph_class_index, "arc"); - lua_pushvalue(L, digraph_pos); - lua_rawgeti(L, vertices_pos, tail); - lua_rawgeti(L, vertices_pos, head); - lua_call(L, 3, 1); - - if (!lua_isnil(L, -1)) { - // Get syntactic_digraph of the arc: - lua_getfield(L, -1, "syntactic_digraph"); - - // Call syntactic_digraph:arc(tail, head) - lua_getfield(L, digraph_class_index, "arc"); - lua_pushvalue(L, -2); - lua_rawgeti(L, vertices_pos, tail); - lua_rawgeti(L, vertices_pos, head); - lua_call(L, 3, 1); - - if (!lua_isnil(L, -1)) { - lua_getfield(L, -1, "syntactic_edges"); - int syntactic_edges_index = lua_gettop(L); - - int n = lua_rawlen(L, syntactic_edges_index); - init_edge_array(edges, n); - int i; - for (i=1; i<=n; i++) { - lua_rawgeti(L, syntactic_edges_index, i); - lua_gettable(L, EDGES_INDEX); - if (!lua_isnumber(L, -1)) { - pgfgd_digraph_free_edge_array(edges); - luaL_error(L, "syntactic edge index not found"); - } - int p = lua_tonumber(L, -1); - edges->array[i-1] = g->syntactic_digraph->syntactic_edges.array[p-1]; - } - } - } - - lua_settop(L, tos); - - return edges; -} - - - -void pgfgd_digraph_free (pgfgd_Digraph* g) -{ - free(g); -} - -void pgfgd_digraph_free_arc_array (pgfgd_Arc_array* arcs) -{ - free (arcs->tails); - free (arcs->heads); - free (arcs); -} - -void pgfgd_digraph_free_edge_array (pgfgd_Edge_array* edges) -{ - free (edges->array); - free (edges); -} - - - -// Handling declarations - - -struct pgfgd_Declaration { - const char* key; - const char* summary; - const char* type; - const char* initial; - void* initial_user; - const char* default_value; - const char* alias; - const char* alias_function_string; - const char* documentation; - const char* documentation_in; - pgfgd_algorithm_fun algorithm; - void* algorithm_user; - const char* phase; - - int use_length; - const char** use_keys; - const char** use_values_strings; - void** use_values_user; - - int examples_length; - const char** examples; - - int pre_length; - const char** pre; - - int post_length; - const char** post; -}; - - -pgfgd_Declaration* pgfgd_new_key (const char* key) -{ - pgfgd_Declaration* d = (pgfgd_Declaration*) calloc(1, sizeof(pgfgd_Declaration)); - - d->key = key; - - return d; -} - -void pgfgd_declare(struct lua_State* state, pgfgd_Declaration* d) -{ - if (d && d->key) { - int tos = lua_gettop(state); - - lua_gc(state, LUA_GCSTOP, 0); // Remove once Lua Link Bug is fixed - - // Find declare function: - lua_getglobal(state, "require"); - lua_pushstring(state, "pgf.gd.interface.InterfaceToAlgorithms"); - lua_call(state, 1, 1); - lua_getfield(state, -1, "declare"); - - // Build a Lua table: - lua_createtable(state, 0, 11); - - set_field (state, d->key, "key"); - set_field (state, d->summary, "summary"); - set_field (state, d->type, "type"); - set_field (state, d->initial, "initial"); - set_field (state, d->documentation, "documentation"); - set_field (state, d->documentation_in, "documentation_in"); - set_field (state, d->default_value, "default"); - set_field (state, d->alias, "alias"); - set_field (state, d->alias_function_string, "alias_function_string"); - set_field (state, d->phase, "phase"); - - if (d->initial_user) { - lua_pushlightuserdata(state, d->initial_user); - lua_setfield(state, -2, "initial"); - } - - if (d->use_length > 0) { - lua_createtable(state, d->use_length, MIN_HASH_SIZE_FIX); - int i; - for (i=0; i < d->use_length; i++) { - lua_createtable(state, 0, 2); - set_field(state, d->use_keys[i], "key"); - if (d->use_values_strings[i]) - set_field(state, d->use_values_strings[i], "value"); - if (d->use_values_user[i]) { - lua_pushlightuserdata(state, d->use_values_user[i]); - lua_setfield(state, -2, "value"); - } - lua_rawseti(state, -2, i+1); - } - lua_setfield(state, -2, "use"); - } - - if (d->pre) { - lua_createtable(state, 0, d->pre_length); - int i; - for (i=0; i < d->pre_length; i++) { - lua_pushboolean(state, 1); - lua_setfield(state, -2, d->pre[i]); - } - lua_setfield(state, -2, "preconditions"); - } - - if (d->post) { - lua_createtable(state, 0, d->post_length); - int i; - for (i=0; i < d->post_length; i++) { - lua_pushboolean(state, 1); - lua_setfield(state, -2, d->post[i]); - } - lua_setfield(state, -2, "postconditions"); - } - - if (d->examples) { - lua_createtable(state, d->examples_length, MIN_HASH_SIZE_FIX); - int i; - for (i=0; i < d->examples_length; i++) { - lua_pushstring(state, d->examples[i]); - lua_rawseti(state, -2, i+1); - } - lua_setfield(state, -2, "examples"); - } - - if (d->algorithm) { - // The algorithm function and the user data is stored as lightuserdate upvalue - lua_pushlightuserdata(state, (void *) d->algorithm); - lua_pushlightuserdata(state, (void *) d->algorithm_user); - - // Find the Digraph.arc function and store it as the second upvalue: - lua_getglobal(state, "require"); - lua_pushstring(state, "pgf.gd.model.Digraph"); - lua_call(state, 1, 1); - - lua_pushcclosure(state, algorithm_dispatcher, 3); - lua_setfield(state, -2, "algorithm_written_in_c"); - } - - // Call the declare function: - lua_call(state, 1, 0); - - // Cleanup: - lua_settop(state, tos); - - lua_gc(state, LUA_GCRESTART, 0); // Remove once Lua Link Bug is fixed - } -} - -void pgfgd_key_add_use(pgfgd_Declaration* d, const char* key, const char* value) -{ - d->use_length++; - d->use_keys = (const char **) realloc(d->use_keys, d->use_length*sizeof(const char*)); - d->use_values_strings = (const char **) realloc(d->use_values_strings, d->use_length*sizeof(const char*)); - d->use_values_user = (void **) realloc(d->use_values_user, d->use_length*sizeof(void*)); - - d->use_keys [d->use_length-1] = key; - d->use_values_strings[d->use_length-1] = value; - d->use_values_user [d->use_length-1] = 0; -} - -void pgfgd_key_add_use_user(pgfgd_Declaration* d, const char* key, void* value) -{ - d->use_length++; - d->use_keys = (const char **) realloc(d->use_keys, d->use_length*sizeof(const char*)); - d->use_values_strings = (const char **) realloc(d->use_values_strings, d->use_length*sizeof(const char*)); - d->use_values_user = (void **) realloc(d->use_values_user, d->use_length*sizeof(void*)); - - d->use_keys [d->use_length-1] = key; - d->use_values_strings[d->use_length-1] = 0; - d->use_values_user [d->use_length-1] = value; -} - -void pgfgd_key_add_example(pgfgd_Declaration* d, const char* s) -{ - d->examples_length++; - d->examples = (const char **) realloc(d->examples, d->examples_length*sizeof(const char*)); - - d->examples[d->examples_length-1] = s; -} - -void pgfgd_key_add_precondition(pgfgd_Declaration* d, const char* s) -{ - d->pre_length++; - d->pre = (const char **) realloc(d->pre, d->pre_length*sizeof(const char*)); - - d->pre[d->pre_length-1] = s; -} - -void pgfgd_key_add_postcondition(pgfgd_Declaration* d, const char* s) -{ - d->post_length++; - d->post = (const char **) realloc(d->post, d->post_length*sizeof(const char*)); - - d->post[d->post_length-1] = s; -} - -void pgfgd_key_summary(pgfgd_Declaration* d, const char* s) -{ - d->summary = s; -} - -void pgfgd_key_type(pgfgd_Declaration* d, const char* s) -{ - d->type = s; -} - -void pgfgd_key_initial(pgfgd_Declaration* d, const char* s) -{ - d->initial = s; -} - -void pgfgd_key_initial_user(pgfgd_Declaration* d, void* s) -{ - d->initial_user = s; -} - -void pgfgd_key_default(pgfgd_Declaration* d, const char* s) -{ - d->default_value = s; -} - -void pgfgd_key_alias(pgfgd_Declaration* d, const char* s) -{ - d->alias = s; -} - -void pgfgd_key_alias_function(pgfgd_Declaration* d, const char* s) -{ - d->alias_function_string = s; -} - -void pgfgd_key_documentation(pgfgd_Declaration* d, const char* s) -{ - d->documentation = s; -} - -void pgfgd_key_documentation_in(pgfgd_Declaration* d, const char* s) -{ - d->documentation_in = s; -} - -void pgfgd_key_phase(pgfgd_Declaration* d, const char* s) -{ - d->phase = s; -} - -void pgfgd_key_algorithm(pgfgd_Declaration* d, pgfgd_algorithm_fun f, void* user_data) -{ - d->algorithm = f; - d->algorithm_user = user_data; -} - -void pgfgd_free_key(pgfgd_Declaration* d) -{ - if (d) { - free(d->examples); - free(d->use_keys); - free(d->use_values_user); - free(d->use_values_strings); - free(d); - } -} diff --git a/graphics/pgf/base/source/InterfaceFromC.h b/graphics/pgf/base/source/InterfaceFromC.h deleted file mode 100644 index 40495dbdc2..0000000000 --- a/graphics/pgf/base/source/InterfaceFromC.h +++ /dev/null @@ -1,613 +0,0 @@ -#ifndef PGF_GD_INTERFACE_C_INTERFACEFROMC_H -#define PGF_GD_INTERFACE_C_INTERFACEFROMC_H - -/** \file pgf/gd/interface/c/InterfaceFromC.h - - The C-header file that should be used by algorithms written - in C for graph drawing in Lua. -*/ - - -#ifdef __cplusplus -extern "C" { -#endif - - - - - -// Option handling - -/** Abstraction of a Lua option table. - You cannot access it directly, but only through the function - pgfgd_isset and so on. Note that pointers to such option tables - will only be valid during a run of the algorithm; you cannot store - a point to an option table past the run of an algorithm. -*/ - -typedef struct pgfgd_OptionTable pgfgd_OptionTable; - - -/** Returns 1 if the key is actually set in the option table to any - non-nil value; otherwise 0. */ -int pgfgd_isset(pgfgd_OptionTable* t, const char* key); - -/** Returns 1 if the key is a number (or can be converted to a - number) in the option table. */ -int pgfgd_isnumber(pgfgd_OptionTable* t, const char* key); - -/** Returns 1 if the key is a string in the option table. */ -int pgfgd_isstring(pgfgd_OptionTable* t, const char* key); - -/** Returns 1 if the key is a Boolean value in the option table. */ -int pgfgd_isboolean(pgfgd_OptionTable* t, const char* key); - -/** Returns 1 if the key is a user value in the option table. */ -int pgfgd_isuser(pgfgd_OptionTable* t, const char* key); - -/** Provided that pgfgd_isnumber returns 1 for the key, this funciton - will return the number stored in the key (otherwise, the function - may crash). Note that integers are also retrieved through this function. */ -double pgfgd_tonumber(pgfgd_OptionTable* t, const char* key); - -/** Provided that pgfgd_isstring returns 1 for this key, this function - returns a copy of the string stored in the key. You must free the - returned string yourself. */ -char* pgfgd_tostring(pgfgd_OptionTable* t, const char* key); - -/** Provided that pgfgd_isboolean returns 1 for this key, the function - returns this Boolean value. */ -int pgfgd_toboolean(pgfgd_OptionTable* t, const char* key); - -/** Provided that pgfgd_isuser returns 1 for this key, the function - returns this user value. */ -void* pgfgd_touser(pgfgd_OptionTable* t, const char* key); - - - -// Graph model - -/** An abstraction of a pgf.gd.model.Coordinate object. */ -typedef struct pgfgd_Coordinate { - double x; - double y; -} pgfgd_Coordinate; - - -/** Used to pass around arrays of Coordinate objects. The main purpose - of the structure is to provide access to the length of the - array. Note that numbering starts with 0. -*/ -typedef struct pgfgd_Coordinate_array { - int length; - pgfgd_Coordinate* array; -} pgfgd_Coordinate_array; - - -typedef struct pgfgd_Edge pgfgd_Edge; - -/** An array of Edge objects. */ -typedef struct pgfgd_Edge_array { - - int length; - pgfgd_Edge** array; - -} pgfgd_Edge_array; - - -/** This struct is used to model a Lua Path. In Lua, a path is an - array where each entry is either a Coordinate object or a - string. This is modeled on the C layer by having - two arrays and for each position, either the coordinates array or - the strings array is set (the strings - array is set at position i if, and only if, it is not null). - - Graph drawing functions may wish to modify Edge paths, namely - whenever they wish to setup a special routing for an edge. In this - case, you may not directly modify the object, but, rather, you - must use the functions pgfgd_path_xxx to modify the path - field. When the graph drawing function is done, the values stored - in the the path fields of the Edges of the syntactic digraph are - copied back to Lua. - - Note that numbering starts at 0. Also note that you have to set - the path field for each syntactic edge individually. - - The |length| field will be |-1| for the ``default path'' of an - edge. The actual path (a straight line from the tail to the head - vertex) is generated only when the graph is written back, because - only then the coordinates of the nodes will be known. -*/ - -typedef struct pgfgd_Path { - - /** Both arrays of this struct will have this length, except when - this field is set to -1, indicating that a default path should - be generated when this path is written back to the graph. */ - int length; - - /** An array of coordinates. Not all entries of this array are - relevant, namely only those for which the strings array is null - at the some position. - */ - pgfgd_Coordinate* coordinates; - - /** An array of strings. Whenever an entry in this array is not - null, the entry in the coordinates array at the same position is - ignored. */ - char** strings; - -} pgfgd_Path; - - - -/** An abstraction of a pgf.gd.model.Vertex. These objects are - managed by the library (including creation and deletion), you - should not create them yourself or modify them, except for the pos - field, which you should modify (indeed, this is the whole purpose - of your graph drawing algorithm). -*/ - -typedef struct pgfgd_Vertex { - - /** The name field of the Lua Vertex class. */ - char* name; - - /** The path field of the Lua Vertex class. */ - pgfgd_Path* path; - - /** The shape field of the Lua Vertex class. */ - char* shape; - - /** The kind field of the Lua Vertex class. */ - char* kind; - - /** The pos field of the Lua Vertex class. Unlike the other fields - of this struct, you can write pos.x and pos.y. When the graph - drawing function returns, the values stored in theses fields - will be written back to the Lua layer. - */ - pgfgd_Coordinate pos; - - /** The options fields of the Lua Vertex class. Note that you do - not have direct access to theses options. Rather, all access to - them must go through functions like pgfgd_isset that take a - pgfgd_OptionsTable* as input. Also note that you cannot store a - pointer to an options table: At the end of the graph drawing - function, all option table pointers will loose their - meaning. If you really wish to store an options table, you need - to retrieve all information stored in it while the point is - still active and then store the retrieved information in your - own table. - */ - pgfgd_OptionTable* options; - - /** Similar to the incoming field of the Lua Vertex class, but it - stores abstractions of the syntactic Edges objects of the - syntactic digraph, rather than the table of Arc objects that are - really stored in a Vertex. Also note that in a Lua Vertex - object, the incoming and outgoing arcs depend on the graph, - while a pgfgd_Vertex always only stores the incoming and - outgoing edges of the syntactic digraph. The order of the edges - in the incoming array will be the same as on the Lua layer, but - numbering starts with 0 (since these are C arrays). - */ - pgfgd_Edge_array incoming; - - /** Like the incoming fields. */ - pgfgd_Edge_array outgoing; - - /** The index of this vertex in the array entry of the syntactic - digraph. */ - int array_index; - -} pgfgd_Vertex; - - - -/** Used to pass around arrays of Vertex objects (more precisely, of - arrays of pointers to pgfgd_Vertex objects). Note that numbering - starts with 0. -*/ - -typedef struct pgfgd_Vertex_array { - int length; - pgfgd_Vertex** array; -} pgfgd_Vertex_array; - - - -/** This function allows you to query an anchor of a vertex (like a - call to |Vertex:anchor|). The function returns - |1| if there is such an anchor, otherwise |0| is returned and - both |x| and |y| will be set to 0. */ -extern int pgfgd_vertex_anchor(pgfgd_Vertex* v, const char* anchor, double* x, double* y); - - - -/** An abstraction of pgf.gd.model.Edge. */ - -struct pgfgd_Edge { - - /** The tail field of the Lua Edge class. */ - pgfgd_Vertex* tail; - - /** The head field of the Lua Edge class. */ - pgfgd_Vertex* head; - - /** The direction field of the Lua Edge class. */ - char* direction; - - /** The path field of the Lua Edge class. You can read this field - directly, but you can write it only through the function whose - names start with pgfgd_path. - - For each pgfgd_Edge object, at the end of the graph drawing - routinge, the value stored in this field will be written back to - the path field of the original syntactic edge. - */ - pgfgd_Path* path; - - /** A pointer to the options table of the Edge. This works like the - options table of pgdgd_Vertex and the same restrictions apply. - */ - pgfgd_OptionTable* options; - - /** The index of this edge in the array entry of the syntactic - digraph. */ - int array_index; - -}; - - -typedef struct pgfgd_SyntacticDigraph_internals pgfgd_SyntacticDigraph_internals; - - -/** The class pgf.gd.model.Digraph is modeled using two different C - structs: First, we have pgfgd_SyntacticDigraph and, second, we - have pgfgd_Digraph. The first is used, only, to model the (single) - syntactic digraph that is passed to the graph drawing function, - while the second is used to model different, more light weight - digraphs that are computed be the graph drawing system prior to - the call of the graph drawing routine. For instance, the spanning - tree computed by the graph drawing system for algorithms whose - preconditions included "tree" will be modeled as a pgfgd_Digraph. - - There is only one pgfgd_SyntacticDigraph during a call of - the graph drawing routine and you can access its properties - directly by accessing the fields of the struct. You cannot, - however, modify the syntactic digraph, except for setting the pos - fields of the vertices and for setting the path field arrays of - the syntactic edges (through the pgfgd_path_xxx functions). When - the graph drawing function is done, the modifications will be - written back to the Lua layer. - - Note that the syntactic digraph only stores the syntactic edges, - not the Arc objects. In particular, when you write - |graph { a <- b }| on the TikZ layer, you will get one syntactic - edge from a to b (not the other way round) with its direction - field set to "<-" in the syntactic digraph object. - */ - -typedef struct pgfgd_SyntacticDigraph { - - /** The vertices field of a Lua (syntactic) digraph. You may not - modify this array, except for changing the pos fields of the - vertices. */ - pgfgd_Vertex_array vertices; - - /** All syntactic edges of the graph. You cannot modify this array, - but you can use the pgfgd_path_xxx funtion to change the routing - of the edges stored here. Note that, since you get access to - syntactic edges, the direction of these edges may not be what - you expect and there may be several syntactic edges between the - same vertices. - */ - pgfgd_Edge_array syntactic_edges; - - /** The syntactic digraph's options field. Like all options fields, - it will go out of scope at the end of the graph drawing - routine. - */ - pgfgd_OptionTable* options; - - pgfgd_SyntacticDigraph_internals* internals; - -} pgfgd_SyntacticDigraph; - - - - -// Modifying edge bend paths - -/** You can apply this function to an Edge to clear the routing path - stored in it. -*/ -extern void pgfgd_path_clear (pgfgd_Edge* e); - -/** This function adds a moveto at the end of a path. */ -extern void pgfgd_path_append_moveto (pgfgd_Edge* e, double x, double y); - -/** This function adds a moveto to the |tail anchor| of the tail of - the edge. This call is useful for ``starting'' a path. This - function is a ``service function,'' you can achieve the same - effect by directly reading the option table of the tail vertex - and then using the pgfgd_vertex_anchor method. */ -extern void pgfgd_path_append_moveto_tail (pgfgd_Edge* e); - -/** This function adds a lineto at the end of a path. */ -extern void pgfgd_path_append_lineto (pgfgd_Edge* e, double x, double y); - -/** This function adds a linto to the |head anchor| of the head of - the edge. This call is useful for ``ending'' a path. */ -extern void pgfgd_path_append_lineto_head (pgfgd_Edge* e); - -/** This function adds a closepath at the end of a path. */ -extern void pgfgd_path_append_closepath (pgfgd_Edge* e); - -/** This function adds a curevto at the end of a path. */ -extern void pgfgd_path_append_curveto (pgfgd_Edge* e, double x1, double y1, double x2, double y2, double x, double y); - - - - -// Querying graphs other than the syntactic digraph - -/** A pgfgd_Digraph is a light-weight abstraction of a Lua Digraph - object. Unlike a pgfgd_SyntacticDigraph, you cannot access the - fields such an object directly, rather, all information is - retrieved through functions starting with pgfgd_digraph. - - When the graph drawing function is called, the graph drawing - system will already have computed a number of special digraphs in - addition to the syntactic digraph passed to the function. For - instance, there is always the "ugraph", which is the undirected - graph underlying the syntactic digraph. To access these special - graphs, you first call pgfgd_get_digraph and then use the - pgfgd_digraph_xxx function to retrieve information about them. - - Unlike the pgfgd_SyntacticDigraph object, which is managed by the - library, you must free pgfgd_Digraph objects yourself through the - pgfgd_digraph_free function. -*/ - -typedef struct pgfgd_Digraph pgfgd_Digraph; - -/** There is no abstraction of an Arc object on the C layer. Rather, - an arc is simply the index of the tail vertex plus the index of - the head vertex, where the indices are relative to the array of - vertices making up the digraph under consideration. - - You may wonder why we store indices rather than pointers to - pgfgd_Vertex objects. The reason is that a pgfgd_Digraph may - actually contain vertices that are not present in the syntactic - digraph (for instance, dummy vertices in a spanning tree) and for - which no pgfgd_Vertex obejct exists. For this reason, we only use - indices and there is a special function - (pgfgd_digraph_syntactic_vertex) that can be used to retrieve the - pgfgd_Vertex object, provided it exists. - - Note that the numbers stored in the tails and heads arrays, which - refer to positions inside a Lua vertices array, start numbering - with 1. The arrays themselves, however, start numbering with - 0. So, tails[0] == 1 and heads[0] == 2 would mean that there is an - Arc from the first to the second vertex. You can pass the numbers - stored in these arrays directly to the pgfgd_digraph_xxx - functions. - - You must free pgfgd_Arc_array objects yourself via - pgfgd_digraph_free_arc_array. - */ -typedef struct pgfgd_Arc_array { - - /** The length of both arrays. */ - int length; - - /** The array of the numbers of the tail vertices of the arcs. The - array itself starts numbering with 0, but its entries refer to - positions inside Lua array, so their numbering starts with 1. */ - int* tails; - - /** Like tails. */ - int* heads; - -} pgfgd_Arc_array; - - -/** In order to access special digraphs like the |ugraph| or the - |spanning_tree| computed by the graph drawing system, you first - need to call this function. In detail, the graph_name must be the - name of a field of the Lua algorithm object and this field must - store a |Digraph| object. Examples are "digraph" or "ugraph". The - function will then return a handle to this digraph which you can - subsequently access. The handle will become invalid at the end of - the graph drawing funciton and you must free it explicitly using - pgfgd_digraph_free. - */ -extern pgfgd_Digraph* pgfgd_get_digraph (pgfgd_SyntacticDigraph* g, const char* graph_name); - -/** Returns the number of vertices in the digraph. Note that this - number needs not be the same as the number of vertices in the - syntactic digraph and that the ordering need not be the - same as in the syntactic digraph. */ -extern int pgfgd_digraph_num_vertices (pgfgd_Digraph* g); - -/** Returns a newly allocated array of all arcs present in the - digraph. You must free this array explicitly using - pgfgd_digraph_free_arc_array. -*/ -extern pgfgd_Arc_array* pgfgd_digraph_arcs (pgfgd_Digraph* g); - -/** This function allows you to retrieve the syntatic vertex that - corresponds to a given index in the digraph. Normally, the first - vertex of a digraph like the ugraph will also be the first entry - of the vertices field of the syntactic digraph, but this need not - always be the case. For instance, for a spanning_tree digraph, - there will be more vertices in the graph than there are syntactic - vertices and the order may be quite different. For theses reaons, - you must use this function to convert a vertex index into the - digraph g into a pgfgd_Vertex object. It may happen that the index - does not refer to any syntactic vertex, in this case 0 is - returned. - - Note that v is an index into a Lua array and, thus, numbering - starts with 1. -*/ -extern pgfgd_Vertex* pgfgd_digraph_syntactic_vertex (pgfgd_Digraph* g, int v); - -/** Tests whether there is an arc between two vertices in the digraph - g. The tail and head are indices starting with 1. This operation - takes time $O(1)$. -*/ -extern int pgfgd_digraph_isarc (pgfgd_Digraph* g, int tail, int head); - -/** Returns an array of all syntactic edges present between two - vertices (whose indices are given as input). You must free the - returned array explicitly using - pgfgd_digraph_free_edge_array. Typically, this array will have at - most one entry, but it may happen that the user has specified - several syntatic edges between the same vertices, in which case - you get a larger array here. - - Note that tail and head are indices (starting with 1) into the - digraph's vertices array, which the return value is an array of - syntactic edges present in the syntactic digraph between the - vertices corresponding to these indices. In particular, if the - vertices do not correspond to syntactic vertices, the returned - array will always be empty. -*/ -extern pgfgd_Edge_array* pgfgd_digraph_syntactic_edges (pgfgd_Digraph* g, int tail, int head); - -/** Returns an array of all incoming arcs of the given vertex. (As - always, the vertex is coded as an index starting with 1 into the - vertices array of the digraph.) You must free this array - yourself using pgfgd_digraph_free_arc_array. In the returned - array, all entries of the head array will equal v. - */ -extern pgfgd_Arc_array* pgfgd_digraph_incoming (pgfgd_Digraph* g, int v); - -/** Like pgfgd_digraph_incoming. */ -extern pgfgd_Arc_array* pgfgd_digraph_outgoing (pgfgd_Digraph* g, int v); - -/** Frees a pgfgd_Digraph object previously allocated by the - pgfgd_get_digraph function. */ -extern void pgfgd_digraph_free (pgfgd_Digraph* d); - -/** Frees a pgfgd_Arc_array object; in particular, the arrays stored - inside it are freed. You should call this function once at some - point for all objects of this kind returned by any library function. -*/ -extern void pgfgd_digraph_free_arc_array (pgfgd_Arc_array* arcs); - -/** Like pgfgd_digraph_free_arc_array, but for the Edge arrays - returned by pgfgd_digraph_syntactic_edges. Do not call this - function for the syntactic_edges field of a syntactic digraph. -*/ -extern void pgfgd_digraph_free_edge_array (pgfgd_Edge_array* edges); - - - -// Declarations - -struct lua_State; -typedef void (*pgfgd_algorithm_fun) (pgfgd_SyntacticDigraph* component, void* user_data); -typedef struct pgfgd_Declaration pgfgd_Declaration; - - -/** Each declaration of a new option starts with a call to this - function. The function returns an object whose properties you can - set subsequently through the pgfgd_key_xxx function. Once all - properties of the key have been set, you call pgfgd_declare to - make Lua aware of the option. Then, you need to call - pgfgd_free_key on it. - */ - -extern pgfgd_Declaration* pgfgd_new_key (const char* key); - -/** Sets the summary field of the key. You should always call this - function. */ -extern void pgfgd_key_summary (pgfgd_Declaration* d, const char* s); - -/** Sets the type field of the key. */ -extern void pgfgd_key_type (pgfgd_Declaration* d, const char* s); - -/** Sets the initial field of the key to a string. */ -extern void pgfgd_key_initial (pgfgd_Declaration* d, const char* s); - -/** Sets the initial field of the key to void* value (a light userdata - in Lua-speak). */ -extern void pgfgd_key_initial_user (pgfgd_Declaration* d, void* v); - -/** Sets the default field of the key. */ -extern void pgfgd_key_default (pgfgd_Declaration* d, const char* s); - -/** Sets the alias field of the key. */ -extern void pgfgd_key_alias (pgfgd_Declaration* d, const char* s); - -/** Sets the alias_function_string field of the key. */ -extern void pgfgd_key_alias_function (pgfgd_Declaration* d, const char* s); - -/** Sets the documentation field of the key. */ -extern void pgfgd_key_documentation (pgfgd_Declaration* d, const char* s); - -/** Sets the documentation_in field of the key. */ -extern void pgfgd_key_documentation_in (pgfgd_Declaration* d, const char* s); - -/** Sets the phase field of the key. */ -extern void pgfgd_key_phase (pgfgd_Declaration* d, const char* s); - -/** Sets the algorithm field of the key. The function f must conform - to the function prototype pgfgd_algorithm_fun, which prescribes - that the function takes a syntactic digraph as input - (pgfgd_SyntacticDigraph*) and some user data and does not return - anything. The user data that is passed to the function is the - datum passed here. - - Whenever the key is now used on the Lua layer, the graph drawing - system will run the normal layout pipeline on the graph. Then, at - some point, it would call the actual Lua graph drawing - algorithm. At that point, the function f is called instead. The - parameter of this function will be a representation of the - to-be-drawn syntatic digraph as a C pgfgd_SyntacticDigraph. -*/ -extern void pgfgd_key_algorithm (pgfgd_Declaration* d, - pgfgd_algorithm_fun f, - void* user_data); - -/** Adds a use to the key. This means that whenever the key is used, - the given key--value pairs will also be set. This is used, in - particular, to create aliases for keys (but is not to be confused - with the |alias| field, whose semantics are slightly different). - */ -extern void pgfgd_key_add_use (pgfgd_Declaration* d, const char* key, const char* value); - -/** Adds a use to the key, but with the value being a user value in - Lua-speak. - */ -extern void pgfgd_key_add_use_user (pgfgd_Declaration* d, const char* key, void* value); - -/** Adds an example to the examples field of the key. */ -extern void pgfgd_key_add_example (pgfgd_Declaration* d, const char* s); - -/** Adds a precondition (the field s of the precondition table is set - to true) to the key. */ -extern void pgfgd_key_add_precondition (pgfgd_Declaration* d, const char* s); - -/** Adds a postcondition to the key. */ -extern void pgfgd_key_add_postcondition (pgfgd_Declaration* d, const char* s); - -/** After all properties of an option key have been set, call this - function once to actually declare the key inside the state that - your graph drawing library's main function gets - passed by the Lua dynamic linkage code. */ -extern void pgfgd_declare (struct lua_State* s, pgfgd_Declaration* d); - -/** Frees the memory used by the key object. */ -extern void pgfgd_free_key (pgfgd_Declaration* d); - -#ifdef __cplusplus -} -#endif - - -#endif diff --git a/graphics/pgf/base/source/InterfaceFromOGDF.c++ b/graphics/pgf/base/source/InterfaceFromOGDF.c++ deleted file mode 100644 index 248ee0b19e..0000000000 --- a/graphics/pgf/base/source/InterfaceFromOGDF.c++ +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include - -#include - - -using namespace ogdf; - -namespace scripting { - - - void ogdf_runner::bridge () - { - graph = Graph(); - graph_attributes = GraphAttributes (graph, - GraphAttributes::nodeGraphics | - GraphAttributes::edgeGraphics | - GraphAttributes::nodeLevel | - GraphAttributes::edgeIntWeight | - GraphAttributes::edgeDoubleWeight | - GraphAttributes::nodeWeight); - - pgfgd_SyntacticDigraph* g = parameters->syntactic_digraph; - - int n = g->vertices.length; - int m = g->syntactic_edges.length; - - node* nodes = new node [n]; - - for (int i=0; i < n; i++) { - nodes[i] = graph.newNode(); - - // Compute width and height - double x1, x2,y1,y2; - x1 = x2 = y1 = y2 = 0; - - int first = 1; - - pgfgd_Path* path = g->vertices.array[i]->path; - - for (int j = 1; j < path->length; j++) - if (!path->strings[j]) { - double x = path->coordinates[j].x; - double y = path->coordinates[j].y; - - if (first) { - x1 = x2 = x; - y1 = y2 = y; - first = 0; - } else { - x1 = x < x1 ? x : x1; - x2 = x > x2 ? x : x2; - y1 = y < y1 ? y : y1; - y2 = y > y2 ? y : y2; - } - } - - graph_attributes.width(nodes[i]) = x2-x1; - graph_attributes.height(nodes[i]) = y2-y1; - } - - for (int i=0; i < m; i++) { - int tail = g->syntactic_edges.array[i]->tail->array_index; - int head = g->syntactic_edges.array[i]->head->array_index; - - graph.newEdge(nodes[tail], nodes[head]); - } - } - - void ogdf_runner::unbridge () - { - pgfgd_SyntacticDigraph* g = parameters->syntactic_digraph; - - node v; - int i; - for (i = 0, v = graph.firstNode(); v; v=v->succ(), i++) { - g->vertices.array[i]->pos.x = graph_attributes.x(v); - g->vertices.array[i]->pos.y = graph_attributes.y(v); - } - - edge e; - for (i = 0, e = graph.firstEdge(); e; e=e->succ(), i++) { - pgfgd_Edge* ed = g->syntactic_edges.array[i]; - - DPolyline bend = graph_attributes.bends(e); - - if (bend.begin().valid()) { - bend.unify(); - bend.normalize(); - - // We start with a moveto: - pgfgd_path_clear (ed); - - pgfgd_path_append_moveto_tail(ed); - - for (List::iterator it = bend.begin(); it.valid(); it++) - pgfgd_path_append_lineto(ed, (*it).m_x, (*it).m_y); - - // We end with a lineto: - pgfgd_path_append_lineto_head(ed); - } - } - } - -} diff --git a/graphics/pgf/base/source/InterfaceFromOGDF.h b/graphics/pgf/base/source/InterfaceFromOGDF.h deleted file mode 100644 index bd742eb161..0000000000 --- a/graphics/pgf/base/source/InterfaceFromOGDF.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef PGF_GD_INTERFACE_C_INTERFACEFROMOGDF_H -#define PGF_GD_INTERFACE_C_INTERFACEFROMOGDF_H - -/** \file pgf/gd/interface/c/InterfaceFromOGDF.h - - The C++-header file that should be used by algorithms written - for the OGFD library when the algorithm should be included in Lua. -*/ - -#include -#include -#include - -namespace scripting { - - class ogdf_runner : public runner { - public: - - void bridge (); - void unbridge (); - - protected: - - ogdf::Graph graph; - ogdf::GraphAttributes graph_attributes; - - }; - - - class ogdf_function_runner : public ogdf_runner { - public: - typedef void (*function) (run_parameters&, - ogdf::Graph&, - ogdf::GraphAttributes&); - - ogdf_function_runner (function f) : fun(f) {} - virtual void run () { fun(*parameters, graph, graph_attributes); } - - private: - function fun; - }; -} - - -#endif diff --git a/graphics/pgf/base/source/LocalBiconnectedMerger_script.h b/graphics/pgf/base/source/LocalBiconnectedMerger_script.h deleted file mode 100644 index 898822e0c0..0000000000 --- a/graphics/pgf/base/source/LocalBiconnectedMerger_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct LocalBiconnectedMerger_script : - scripting::declarations, - scripting::factory -{ - ogdf::LocalBiconnectedMerger* make (scripting::run_parameters* parameters) { - using namespace ogdf; - LocalBiconnectedMerger* r = new LocalBiconnectedMerger; - - parameters->configure_option ("LocalBiconnectedMerger.factor", - &LocalBiconnectedMerger::setFactor, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("LocalBiconnectedMerger") - .set_module ("MultilevelBuilder", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.LocalBiconnectedMerger")); - - s.declare (key ("LocalBiconnectedMerger.factor") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.LocalBiconnectedMerger")); - - } - -}; diff --git a/graphics/pgf/base/source/LongestPathRanking_script.h b/graphics/pgf/base/source/LongestPathRanking_script.h deleted file mode 100644 index ca2e634485..0000000000 --- a/graphics/pgf/base/source/LongestPathRanking_script.h +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include - -struct LongestPathRanking_script : - scripting::declarations, - scripting::factory -{ - - ogdf::LongestPathRanking* make (scripting::run_parameters* parameters) { - using namespace ogdf; - LongestPathRanking* r = new LongestPathRanking; - - parameters->configure_option ("LongestPathRanking.separateDeg0Layer", - &LongestPathRanking::separateDeg0Layer, *r); - parameters->configure_option ("LongestPathRanking.separateMultiEdges", - &LongestPathRanking::separateMultiEdges, *r); - parameters->configure_option ("LongestPathRanking.optimizeEdgeLength", - &LongestPathRanking::optimizeEdgeLength, *r); - - parameters->configure_module ("AcyclicSubgraphModule", - &LongestPathRanking::setSubgraph, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - s.declare (key ("LongestPathRanking") - .documentation_in ("pgf.gd.doc.ogdf.layered.LongestPathRanking") - .set_module ("RankingModule", this)); - - s.declare (key ("LongestPathRanking.separateDeg0Layer") - .type ("boolean") - .initial ("true") - .documentation_in ("pgf.gd.doc.ogdf.layered.LongestPathRanking")); - - s.declare (key ("LongestPathRanking.separateMultiEdges") - .type ("boolean") - .initial ("true") - .documentation_in ("pgf.gd.doc.ogdf.layered.LongestPathRanking")); - - s.declare (key ("LongestPathRanking.optimizeEdgeLength") - .type ("boolean") - .initial ("true") - .documentation_in ("pgf.gd.doc.ogdf.layered.LongestPathRanking")); - } -}; - - diff --git a/graphics/pgf/base/source/MakefileConfig.mk b/graphics/pgf/base/source/MakefileConfig.mk deleted file mode 100644 index 25310b6987..0000000000 --- a/graphics/pgf/base/source/MakefileConfig.mk +++ /dev/null @@ -1,45 +0,0 @@ - -# Where Lua is installed -LUAPATH=/usr/local/lua52 - -LUAINCLUDES = $(LUAPATH)/include -LUALIBPATH = $(LUAPATH)/lib - - -# Where ogdf is installed -OGDFPATH=/usr/local/ogdf - -OGDFINCLUDES = $(OGDFPATH) -OGDFLIBPATH = $(OGDFPATH)/_release - - -# Where the pgf C includes are found -PGFINCLUDES=../../../.. - - -# Where the shared libraries should be installed (base dir) -INSTALLDIR=/usr/texbin/lib/luatex/lua - - -# If you need special flags: -MYCFLAGS= -MYLDFLAGS= - -# Link flags for building a shared library -SHAREDFLAGS= - -# Link flags for linking against the shared Lua lib -LINKSHAREDLUA= - -# Architecture flags: -ARCHFLAGS= - -# The to-be-used compiler -CC=gcc - - -# Now read local definition, which may overwrite the above --include $(CONFIGDIR)/LocalMakefileConfig.mk - - - diff --git a/graphics/pgf/base/source/MatchingMerger_script.h b/graphics/pgf/base/source/MatchingMerger_script.h deleted file mode 100644 index 1d50c273cd..0000000000 --- a/graphics/pgf/base/source/MatchingMerger_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct MatchingMerger_script : - scripting::declarations, - scripting::factory -{ - ogdf::MatchingMerger* make (scripting::run_parameters* parameters) { - using namespace ogdf; - MatchingMerger* r = new MatchingMerger; - - parameters->configure_option ("MatchingMerger.selectByNodeMass", - &MatchingMerger::selectByNodeMass, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("MatchingMerger") - .set_module ("MultilevelBuilder", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.MatchingMerger")); - - s.declare (key ("MatchingMerger.selectByNodeMass") - .type ("boolean") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.MatchingMerger")); - - } - -}; diff --git a/graphics/pgf/base/source/MedianHeuristic_script.h b/graphics/pgf/base/source/MedianHeuristic_script.h deleted file mode 100644 index 8ce4a610e7..0000000000 --- a/graphics/pgf/base/source/MedianHeuristic_script.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -struct MedianHeuristic_script : - scripting::declarations, - scripting::factory -{ - - ogdf::MedianHeuristic* make (scripting::run_parameters* parameters) { - return new ogdf::MedianHeuristic; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("MedianHeuristic") - .documentation_in ("pgf.gd.doc.ogdf.layered.MedianHeuristic") - .set_module ("TwoLayerCrossMin", this)); - } -}; - diff --git a/graphics/pgf/base/source/MedianPlacer_script.h b/graphics/pgf/base/source/MedianPlacer_script.h deleted file mode 100644 index 4670554393..0000000000 --- a/graphics/pgf/base/source/MedianPlacer_script.h +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -struct MedianPlacer_script : - scripting::declarations, - scripting::factory -{ - ogdf::MedianPlacer* make (scripting::run_parameters* parameters) { - using namespace ogdf; - MedianPlacer* r = new MedianPlacer; - - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("MedianPlacer") - .set_module ("InitialPlacer", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.MedianPlacer")); - - } - -}; diff --git a/graphics/pgf/base/source/MultilevelLayout_script.h b/graphics/pgf/base/source/MultilevelLayout_script.h deleted file mode 100644 index 091ab9766c..0000000000 --- a/graphics/pgf/base/source/MultilevelLayout_script.h +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -struct MultilevelLayout_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - MultilevelLayout layout; - - parameters->configure_module ("LayoutModule", - &MultilevelLayout::setLayout, layout); - parameters->configure_module ("MultilevelBuilder", - &MultilevelLayout::setMultilevelBuilder, layout); - parameters->configure_module ("InitialPlacer", - &MultilevelLayout::setPlacer, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("MultilevelLayout") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.MultilevelLayout")); - - } - -}; diff --git a/graphics/pgf/base/source/OptimalRanking_script.h b/graphics/pgf/base/source/OptimalRanking_script.h deleted file mode 100644 index f35fc67da7..0000000000 --- a/graphics/pgf/base/source/OptimalRanking_script.h +++ /dev/null @@ -1,34 +0,0 @@ -#include -#include - -struct OptimalRanking_script : - scripting::declarations, - scripting::factory -{ - - ogdf::OptimalRanking* make (scripting::run_parameters* parameters) { - using namespace ogdf; - OptimalRanking* r = new OptimalRanking; - - parameters->configure_option ("OptimalRanking.separateMultiEdges", - &OptimalRanking::separateMultiEdges, *r); - parameters->configure_module ("AcyclicSubgraphModule", - &OptimalRanking::setSubgraph, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - s.declare (key ("OptimalRanking") - .documentation_in ("pgf.gd.doc.ogdf.layered.OptimalRanking") - .set_module ("RankingModule", this)); - - s.declare (key ("OptimalRanking.separateMultiEdges") - .type ("boolean") - .initial ("true") - .documentation_in ("pgf.gd.doc.ogdf.layered.OptimalRanking")); - } -}; - diff --git a/graphics/pgf/base/source/PlanarizationLayout_script.h b/graphics/pgf/base/source/PlanarizationLayout_script.h deleted file mode 100644 index 4fa89d5d19..0000000000 --- a/graphics/pgf/base/source/PlanarizationLayout_script.h +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include - -struct PlanarizationLayout_script : - scripting::declarations, - scripting::ogdf_runner -{ - - void run () { - using namespace ogdf; - PlanarizationLayout layout; - - parameters->configure_option ("PlanarizationLayout.preprocessCliques", - &PlanarizationLayout::preprocessCliques, layout); - parameters->configure_option ("PlanarizationLayout.minCliqueSize", - &PlanarizationLayout::minCliqueSize, layout); - - // .. TODO: configure modules - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - s.declare (key ("PlanarizationLayout") - .precondition ("connected") - .postcondition ("fixed") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.planarity.PlanarizationLayout")); - - s.declare (key ("PlanarizationLayout.preprocessCliques") - .type ("boolean") - .initial ("false") - .documentation_in ("pgf.gd.doc.ogdf.planarity.PlanarizationLayout")); - - s.declare (key ("PlanarizationLayout.minCliqueSize") - .type ("number") - .initial ("10") - .documentation_in ("pgf.gd.doc.ogdf.planarity.PlanarizationLayout")); - } - -}; diff --git a/graphics/pgf/base/source/RandomMerger_script.h b/graphics/pgf/base/source/RandomMerger_script.h deleted file mode 100644 index 8acc53bbef..0000000000 --- a/graphics/pgf/base/source/RandomMerger_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct RandomMerger_script : - scripting::declarations, - scripting::factory -{ - ogdf::RandomMerger* make (scripting::run_parameters* parameters) { - using namespace ogdf; - RandomMerger* r = new RandomMerger; - - parameters->configure_option ("RandomMerger.factor", - &RandomMerger::setFactor, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("RandomMerger") - .set_module ("MultilevelBuilder", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.RandomMerger")); - - s.declare (key ("RandomMerger.factor") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.RandomMerger")); - - } - -}; diff --git a/graphics/pgf/base/source/RandomPlacer_script.h b/graphics/pgf/base/source/RandomPlacer_script.h deleted file mode 100644 index a92873ff47..0000000000 --- a/graphics/pgf/base/source/RandomPlacer_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct RandomPlacer_script : - scripting::declarations, - scripting::factory -{ - ogdf::RandomPlacer* make (scripting::run_parameters* parameters) { - using namespace ogdf; - RandomPlacer* r = new RandomPlacer; - - parameters->configure_option ("RandomPlacer.circleSize", - &RandomPlacer::setCircleSize, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("RandomPlacer") - .set_module ("InitialPlacer", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.RandomPlacer")); - - s.declare (key ("RandomPlacer.circleSize") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.RandomPlacer")); - - } - -}; diff --git a/graphics/pgf/base/source/SiftingHeuristic_script.h b/graphics/pgf/base/source/SiftingHeuristic_script.h deleted file mode 100644 index 653432f52b..0000000000 --- a/graphics/pgf/base/source/SiftingHeuristic_script.h +++ /dev/null @@ -1,40 +0,0 @@ -#include -#include - -struct SiftingHeuristic_script : - scripting::declarations, - scripting::factory -{ - - ogdf::SiftingHeuristic* make (scripting::run_parameters* parameters) { - using namespace ogdf; - - SiftingHeuristic* h = new SiftingHeuristic; - - char* strategy = 0; - - if (parameters->option("SiftingHeuristic.strategy", strategy)) { - if (strcmp(strategy, "left_to_right") == 0) - h->strategy(SiftingHeuristic::left_to_right); - else if (strcmp(strategy, "desc_degree") == 0) - h->strategy(SiftingHeuristic::desc_degree); - else if (strcmp(strategy, "random") == 0) - h->strategy(SiftingHeuristic::random); - - free(strategy); - } - return h; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("SiftingHeuristic") - .documentation_in ("pgf.gd.doc.ogdf.layered.SiftingHeuristic") - .set_module ("TwoLayerCrossMin", this)); - - s.declare (key ("SiftingHeuristic.strategy") - .type ("string") - .documentation_in ("pgf.gd.doc.ogdf.layered.SiftingHeuristic")); - } -}; - diff --git a/graphics/pgf/base/source/SimpleDemoC.c b/graphics/pgf/base/source/SimpleDemoC.c deleted file mode 100644 index 18e5889ad1..0000000000 --- a/graphics/pgf/base/source/SimpleDemoC.c +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include - -static void fast_hello_world (pgfgd_SyntacticDigraph* graph, void* v) { - double angle = 6.28318530718 / graph->vertices.length; - double radius = pgfgd_tonumber(graph->options, "fast simple demo radius"); - - int i; - for (i = 0; i < graph->vertices.length; i++) { - pgfgd_Vertex* v = graph->vertices.array[i]; - v->pos.x = cos(angle*i) * radius; - v->pos.y = sin(angle*i) * radius; - } -} - -int luaopen_pgf_gd_examples_c_SimpleDemoC (struct lua_State *state) { - pgfgd_Declaration* d; - - // The main layout key - d = pgfgd_new_key ("fast simple demo layout"); - pgfgd_key_summary (d, "The C version of the hello world of graph drawing."); - pgfgd_key_algorithm (d, fast_hello_world, 0); - pgfgd_key_documentation (d, - "Just like the |SimpleDemo| algorithm, this algorithm arranges \ - the nodes of a graph in a circle (without paying heed to the sizes of the \ - nodes or to the edges). Its main purpose is to show how C code \ - can access the Lua representation of graphs. See \ - Section~\ref{section-algorithms-in-c} of the manual for detais."); - pgfgd_key_add_precondition (d, "connected"); - pgfgd_declare (state, d); - pgfgd_free_key (d); - - // The radius key - d = pgfgd_new_key ("fast simple demo radius"); - pgfgd_key_summary (d, "A radius value for the hello world of graph drawing"); - pgfgd_key_type (d, "length"); - pgfgd_key_initial (d, "1cm"); - pgfgd_declare (state, d); - pgfgd_free_key (d); - - return 0; -} diff --git a/graphics/pgf/base/source/SimpleDemoCPlusPlus.c++ b/graphics/pgf/base/source/SimpleDemoCPlusPlus.c++ deleted file mode 100644 index 0c810d2570..0000000000 --- a/graphics/pgf/base/source/SimpleDemoCPlusPlus.c++ +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include - -#include - - -struct FastLayout : scripting::declarations, scripting::runner { - - void run () { - pgfgd_SyntacticDigraph* graph = parameters->syntactic_digraph; - - double angle = 6.28318530718 / graph->vertices.length; - double radius = parameters->option("fast simple demo radius c++"); - - for (int i = 0; i < graph->vertices.length; i++) { - pgfgd_Vertex* v = graph->vertices.array[i]; - v->pos.x = cos(angle*i) * radius; - v->pos.y = sin(angle*i) * radius; - } - } - - void declare(scripting::script s) { - using namespace scripting; - - s.declare(key ("fast simple demo layout c++") - .summary ("The C++ version of the hello world of graph drawing") - .precondition ("connected") - .precondition ("tree") - .algorithm (this)); - - s.declare(key ("fast simple demo radius c++") - .summary ("A radius value for the hello world of graph drawing") - .type ("length") - .initial ("1cm")); - } - -}; - -extern "C" int luaopen_pgf_gd_examples_c_SimpleDemoCPlusPlus (struct lua_State *state) { - - scripting::script s (state); - - s.declare (new FastLayout); - - return 0; -} - diff --git a/graphics/pgf/base/source/SimpleDemoOGDF.c++ b/graphics/pgf/base/source/SimpleDemoOGDF.c++ deleted file mode 100644 index b7d914c520..0000000000 --- a/graphics/pgf/base/source/SimpleDemoOGDF.c++ +++ /dev/null @@ -1,43 +0,0 @@ -#include - -#include - -using namespace ogdf; -using namespace scripting; - -struct FastLayoutOGDF : declarations, ogdf_runner { - - void run () { - double angle = 6.28318530718 / graph.numberOfNodes(); - double radius = parameters->option("my radius ogdf"); - - int i = 0; - for (node v = graph.firstNode(); v; v=v->succ(), i++) { - graph_attributes.x(v) = cos(angle*i) * radius; - graph_attributes.y(v) = sin(angle*i) * radius; - } - } - - void declare(script s) { - using namespace scripting; - - s.declare(key ("fast simple demo layout ogdf") - .summary ("The OGDF version of the hello world of graph drawing") - .precondition ("connected") - .algorithm (this)); - - s.declare(key ("my radius ogdf") - .summary ("A radius value for the hello world of graph drawing") - .type ("length") - .initial ("1cm")); - } - -}; - -extern "C" int luaopen_pgf_gd_ogdf_c_SimpleDemoOGDF (struct lua_State *state) { - - script (state).declare (new FastLayoutOGDF); - - return 0; -} - diff --git a/graphics/pgf/base/source/SolarMerger_script.h b/graphics/pgf/base/source/SolarMerger_script.h deleted file mode 100644 index 8453241bd6..0000000000 --- a/graphics/pgf/base/source/SolarMerger_script.h +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -struct SolarMerger_script : - scripting::declarations, - scripting::factory -{ - ogdf::SolarMerger* make (scripting::run_parameters* parameters) { - using namespace ogdf; - SolarMerger* r = new SolarMerger (parameters->option("SolarMerger.simple"), - parameters->option("SolarMerger.massAsNodeRadius")); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("SolarMerger") - .set_module ("MultilevelBuilder", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.SolarMerger")); - - s.declare (key ("SolarMerger.simple") - .type ("boolean") - .initial ("false") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.SolarMerger")); - - s.declare (key ("SolarMerger.massAsNodeRadius") - .type ("boolean") - .initial ("false") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.SolarMerger")); - - } - -}; diff --git a/graphics/pgf/base/source/SolarPlacer_script.h b/graphics/pgf/base/source/SolarPlacer_script.h deleted file mode 100644 index 5f9191251c..0000000000 --- a/graphics/pgf/base/source/SolarPlacer_script.h +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -struct SolarPlacer_script : - scripting::declarations, - scripting::factory -{ - ogdf::SolarPlacer* make (scripting::run_parameters* parameters) { - using namespace ogdf; - SolarPlacer* r = new SolarPlacer; - - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("SolarPlacer") - .set_module ("InitialPlacer", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.SolarPlacer")); - - } - -}; diff --git a/graphics/pgf/base/source/SplitHeuristic_script.h b/graphics/pgf/base/source/SplitHeuristic_script.h deleted file mode 100644 index 6799be36e9..0000000000 --- a/graphics/pgf/base/source/SplitHeuristic_script.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -struct SplitHeuristic_script : - scripting::declarations, - scripting::factory -{ - - ogdf::SplitHeuristic* make (scripting::run_parameters* parameters) { - return new ogdf::SplitHeuristic; - } - - void declare (scripting::script s) { - using namespace scripting; - s.declare (key ("SplitHeuristic") - .documentation_in ("pgf.gd.doc.ogdf.layered.SplitHeuristic") - .set_module ("TwoLayerCrossMin", this)); - } -}; - diff --git a/graphics/pgf/base/source/SpringEmbedderFRExact_script.h b/graphics/pgf/base/source/SpringEmbedderFRExact_script.h deleted file mode 100644 index 4e9fbfb3f1..0000000000 --- a/graphics/pgf/base/source/SpringEmbedderFRExact_script.h +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include - -struct SpringEmbedderFRExact_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - SpringEmbedderFRExact layout; - - parameters->configure_option ("SpringEmbedderFRExact.iterations", - &SpringEmbedderFRExact::iterations, layout); - parameters->configure_option ("SpringEmbedderFRExact.noise", - &SpringEmbedderFRExact::noise, layout); - parameters->configure_option ("SpringEmbedderFRExact.idealEdgeLength", - &SpringEmbedderFRExact::idealEdgeLength, layout); - parameters->configure_option ("SpringEmbedderFRExact.convTolerance", - &SpringEmbedderFRExact::convTolerance, layout); - - char* s = 0; - - if (parameters->option("SpringEmbedderFRExact.coolingFunction", s)) { - if (strcmp(s, "factor") == 0) - layout.coolingFunction(SpringEmbedderFRExact::cfFactor); - else if (strcmp(s, "logarithmic") == 0) - layout.coolingFunction(SpringEmbedderFRExact::cfLogarithmic); - - free(s); - } - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("SpringEmbedderFRExact") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFRExact")); - - s.declare (key ("SpringEmbedderFRExact.iterations") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFRExact")); - - s.declare (key ("SpringEmbedderFRExact.noise") - .type ("boolean") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFRExact")); - - s.declare (key ("SpringEmbedderFRExact.coolingFunction") - .type ("string") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFRExact")); - - s.declare (key ("SpringEmbedderFRExact.idealEdgeLength") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFRExact")); - - s.declare (key ("SpringEmbedderFRExact.convTolerance") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFRExact")); - - } - -}; diff --git a/graphics/pgf/base/source/SpringEmbedderFR_script.h b/graphics/pgf/base/source/SpringEmbedderFR_script.h deleted file mode 100644 index 5ae182e589..0000000000 --- a/graphics/pgf/base/source/SpringEmbedderFR_script.h +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include - -struct SpringEmbedderFR_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - SpringEmbedderFR layout; - - parameters->configure_option ("SpringEmbedderFR.iterations", - &SpringEmbedderFR::iterations, layout); - parameters->configure_option ("SpringEmbedderFR.noise", - &SpringEmbedderFR::noise, layout); - parameters->configure_option ("SpringEmbedderFR.scaleFunctionFactor", - &SpringEmbedderFR::scaleFunctionFactor, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("SpringEmbedderFR") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFR")); - - s.declare (key ("SpringEmbedderFR.iterations") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFR")); - - s.declare (key ("SpringEmbedderFR.noise") - .type ("boolean") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFR")); - - s.declare (key ("SpringEmbedderFR.scaleFunctionFactor") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderFR")); - - } - -}; diff --git a/graphics/pgf/base/source/SpringEmbedderKK_script.h b/graphics/pgf/base/source/SpringEmbedderKK_script.h deleted file mode 100644 index 2b1586a546..0000000000 --- a/graphics/pgf/base/source/SpringEmbedderKK_script.h +++ /dev/null @@ -1,39 +0,0 @@ -#include -#include - -struct SpringEmbedderKK_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - SpringEmbedderKK layout; - - parameters->configure_option ("SpringEmbedderKK.stopTolerance", - &SpringEmbedderKK::setStopTolerance, layout); - parameters->configure_option ("SpringEmbedderKK.desLength", - &SpringEmbedderKK::setDesLength, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("SpringEmbedderKK") - .precondition ("connected") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderKK")); - - s.declare (key ("SpringEmbedderKK.stopTolerance") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderKK")); - - s.declare (key ("SpringEmbedderKK.desLength") - .type ("length") - .documentation_in ("pgf.gd.doc.ogdf.energybased.SpringEmbedderKK")); - - } - -}; diff --git a/graphics/pgf/base/source/SugiyamaLayout_script.h b/graphics/pgf/base/source/SugiyamaLayout_script.h deleted file mode 100644 index c9cf097373..0000000000 --- a/graphics/pgf/base/source/SugiyamaLayout_script.h +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include - -struct SugiyamaLayout_script : - scripting::declarations, - scripting::ogdf_runner -{ - void run () { - using namespace ogdf; - SugiyamaLayout layout; - - parameters->configure_option ("SugiyamaLayout.runs", - &SugiyamaLayout::runs, layout); - parameters->configure_option ("SugiyamaLayout.transpose", - &SugiyamaLayout::transpose, layout); - parameters->configure_option ("SugiyamaLayout.fails", - &SugiyamaLayout::fails, layout); - - parameters->configure_module ("RankingModule", - &SugiyamaLayout::setRanking, layout); - parameters->configure_module ("TwoLayerCrossMin", - &SugiyamaLayout::setCrossMin, layout); - parameters->configure_module ("HierarchyLayoutModule", - &SugiyamaLayout::setLayout, layout); - - layout.call (graph_attributes); - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - s.declare (key ("SugiyamaLayout") - .precondition ("connected") - .postcondition ("upward_oriented_swapped") - .algorithm (this) - .documentation_in ("pgf.gd.doc.ogdf.layered.SugiyamaLayout")); - - s.declare (key ("SugiyamaLayout.runs") - .type ("number") - .initial ("15") - .documentation_in ("pgf.gd.doc.ogdf.layered.SugiyamaLayout")); - - s.declare (key ("SugiyamaLayout.transpose") - .type ("boolean") - .initial ("true") - .documentation_in ("pgf.gd.doc.ogdf.layered.SugiyamaLayout")); - - s.declare (key ("SugiyamaLayout.fails") - .type ("number") - .initial ("4") - .documentation_in ("pgf.gd.doc.ogdf.layered.SugiyamaLayout")); - } - -}; diff --git a/graphics/pgf/base/source/ZeroPlacer_script.h b/graphics/pgf/base/source/ZeroPlacer_script.h deleted file mode 100644 index 255ac34bd8..0000000000 --- a/graphics/pgf/base/source/ZeroPlacer_script.h +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include - -struct ZeroPlacer_script : - scripting::declarations, - scripting::factory -{ - ogdf::ZeroPlacer* make (scripting::run_parameters* parameters) { - using namespace ogdf; - ZeroPlacer* r = new ZeroPlacer; - - parameters->configure_option ("ZeroPlacer.randomRange", - &ZeroPlacer::setRandomRange, *r); - - return r; - } - - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (key ("ZeroPlacer") - .set_module ("InitialPlacer", this) - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.ZeroPlacer")); - - s.declare (key ("ZeroPlacer.randomRange") - .type ("number") - .documentation_in ("pgf.gd.doc.ogdf.energybased.multilevelmixer.ZeroPlacer")); - - } - -}; diff --git a/graphics/pgf/base/source/energybased_script.h b/graphics/pgf/base/source/energybased_script.h deleted file mode 100644 index fdcd92565e..0000000000 --- a/graphics/pgf/base/source/energybased_script.h +++ /dev/null @@ -1,31 +0,0 @@ -#include - -#include "FMMMLayout_script.h" -#include "GEMLayout_script.h" -#include "FastMultipoleEmbedder_script.h" - -#include "SpringEmbedderFR_script.h" -#include "SpringEmbedderFRExact_script.h" -#include "SpringEmbedderKK_script.h" - -#include "MultilevelLayout_script.h" - -#include "multilevelmixer/multilevelmixer_script.h" - -struct energybased_script : - scripting::declarations -{ - void declare (scripting::script s) { - s.declare (new FMMMLayout_script); - s.declare (new GEMLayout_script); - s.declare (new FastMultipoleEmbedder_script); - - s.declare (new SpringEmbedderFR_script); - s.declare (new SpringEmbedderFRExact_script); - s.declare (new SpringEmbedderKK_script); - - s.declare (new MultilevelLayout_script); - - s.declare (new multilevelmixer_script); - } -}; diff --git a/graphics/pgf/base/source/layered_script.h b/graphics/pgf/base/source/layered_script.h deleted file mode 100644 index 8a117f1fc6..0000000000 --- a/graphics/pgf/base/source/layered_script.h +++ /dev/null @@ -1,46 +0,0 @@ -#include - -#include "SugiyamaLayout_script.h" - -#include "LongestPathRanking_script.h" -#include "OptimalRanking_script.h" -#include "CoffmanGrahamRanking_script.h" - -#include "DfsAcyclicSubgraph_script.h" -#include "GreedyCycleRemoval_script.h" - -#include "BarycenterHeuristic_script.h" -#include "GreedyInsertHeuristic_script.h" -#include "SiftingHeuristic_script.h" -#include "MedianHeuristic_script.h" -#include "SplitHeuristic_script.h" - -#include "FastHierarchyLayout_script.h" -#include "FastSimpleHierarchyLayout_script.h" - -struct layered_script : - scripting::declarations -{ - void declare (scripting::script s) { - using namespace scripting; - using namespace ogdf; - - s.declare (new SugiyamaLayout_script); - - s.declare (new LongestPathRanking_script); - s.declare (new OptimalRanking_script); - s.declare (new CoffmanGrahamRanking_script); - - s.declare (new DfsAcyclicSubgraph_script); - s.declare (new GreedyCycleRemoval_script); - - s.declare (new BarycenterHeuristic_script); - s.declare (new GreedyInsertHeuristic_script); - s.declare (new SiftingHeuristic_script); - s.declare (new MedianHeuristic_script); - s.declare (new SplitHeuristic_script); - - s.declare (new FastHierarchyLayout_script); - s.declare (new FastSimpleHierarchyLayout_script); - } -}; diff --git a/graphics/pgf/base/source/misclayout_script.h b/graphics/pgf/base/source/misclayout_script.h deleted file mode 100644 index 22ac039b7f..0000000000 --- a/graphics/pgf/base/source/misclayout_script.h +++ /dev/null @@ -1,13 +0,0 @@ -#include - -#include "BalloonLayout_script.h" -#include "CircularLayout_script.h" - -struct misclayout_script : - scripting::declarations -{ - void declare (scripting::script s) { - s.declare (new BalloonLayout_script); - s.declare (new CircularLayout_script); - } -}; diff --git a/graphics/pgf/base/source/module_script.h b/graphics/pgf/base/source/module_script.h deleted file mode 100644 index 97579ecdd9..0000000000 --- a/graphics/pgf/base/source/module_script.h +++ /dev/null @@ -1,27 +0,0 @@ -#include - -struct module_script : scripting::declarations { - void declare (scripting::script s) - { - using namespace scripting; - - s.declare (key ("RankingModule") - .module_type ()); - - s.declare (key ("AcyclicSubgraphModule") - .module_type ()); - - s.declare (key ("HierarchyLayoutModule") - .module_type ()); - - s.declare (key ("TwoLayerCrossMin") - .module_type ()); - - s.declare (key ("InitialPlacer") - .module_type ()); - - s.declare (key ("MultilevelBuilder") - .module_type ()); - } -}; - diff --git a/graphics/pgf/base/source/multilevelmixer_script.h b/graphics/pgf/base/source/multilevelmixer_script.h deleted file mode 100644 index 499406bc33..0000000000 --- a/graphics/pgf/base/source/multilevelmixer_script.h +++ /dev/null @@ -1,33 +0,0 @@ -#include - -#include "BarycenterPlacer_script.h" -#include "IndependentSetMerger_script.h" -#include "MedianPlacer_script.h" -#include "SolarMerger_script.h" -#include "CirclePlacer_script.h" -#include "LocalBiconnectedMerger_script.h" -#include "RandomMerger_script.h" -#include "SolarPlacer_script.h" -#include "EdgeCoverMerger_script.h" -#include "MatchingMerger_script.h" -#include "RandomPlacer_script.h" -#include "ZeroPlacer_script.h" - -struct multilevelmixer_script : - scripting::declarations -{ - void declare (scripting::script s) { - s.declare (new BarycenterPlacer_script); - s.declare (new IndependentSetMerger_script); - s.declare (new MedianPlacer_script); - s.declare (new SolarMerger_script); - s.declare (new CirclePlacer_script); - s.declare (new LocalBiconnectedMerger_script); - s.declare (new RandomMerger_script); - s.declare (new SolarPlacer_script); - s.declare (new EdgeCoverMerger_script); - s.declare (new MatchingMerger_script); - s.declare (new RandomPlacer_script); - s.declare (new ZeroPlacer_script); - } -}; diff --git a/graphics/pgf/base/source/ogdf_script.c++ b/graphics/pgf/base/source/ogdf_script.c++ deleted file mode 100644 index 12a5f6bfeb..0000000000 --- a/graphics/pgf/base/source/ogdf_script.c++ +++ /dev/null @@ -1,23 +0,0 @@ -#include - -#include "module/module_script.h" - -#include "layered/layered_script.h" -#include "energybased/energybased_script.h" -#include "misclayout/misclayout_script.h" -#include "planarity/planarity_script.h" - - -extern "C" int luaopen_pgf_gd_ogdf_c_ogdf_script (struct lua_State *state) { - - scripting::script s (state); - - s.declare (new module_script); - s.declare (new layered_script); - s.declare (new energybased_script); - s.declare (new misclayout_script); - s.declare (new planarity_script); - - return 0; -} - diff --git a/graphics/pgf/base/source/pgfmathtestsuite.tex b/graphics/pgf/base/source/pgfmathtestsuite.tex deleted file mode 100644 index 6baf5ddba4..0000000000 --- a/graphics/pgf/base/source/pgfmathtestsuite.tex +++ /dev/null @@ -1,1264 +0,0 @@ -% FIXME: this class is MESSY. -% -% rewrite with proper assertions ... it goes back to a time where I -% merely wanted to inspect the results! -% -% --> see 'assertEquals' in this file -% -\documentclass[a4paper]{article} - -\usepackage[intlimits]{amsmath} -\usepackage{amssymb} -\usepackage{amsfonts} -\usepackage{ifpdf} - -\ifpdf - \usepackage{hyperref} -\else - \def\pgfsysdriver{pgfsys-dvipdfm.def} - \usepackage[dvipdfm]{hyperref} -\fi -\usepackage{tikz} -\usepackage{fp} - -\makeatletter -\pgfutil@ifundefined{pgfmathdeclarefunction}{ - % load pgfplots with its pgf 2.00 compatibility code: - \usepackage{pgfplots} -}{ - \usepgflibrary{fpu} -} -\makeatother - -\pgfmathfloatcreate{1}{5.0}{-4} -\let\THRESH=\pgfmathresult - - -\parindent=0pt - - -\author{Christian Feuers\"anger} -\title{Test cases for pgffloatmath.code.tex} - -\def\testsection#1{\message{---------- STARTING TEST SECTION '#1'}\section{#1}} -\def\testsubsection#1{\message{-------STARTING TEST SUBSECTION '#1'}\subsection{#1}} -\def\testsubsubsection#1{\message{------STARTING TEST SUBSUBSECTION '#1'}\subsubsection{#1}} - - -\def\compare#1#2{% - \begingroup - \message{COMPUTING LOG(#1)}% - \pgfmathlog{#1}% - \let\actual=\pgfmathresult - \def\expected{#2}% - \pgfmathsubtract\actual\expected% - \let\abserr=\pgfmathresult - \pgfmathdivide\abserr\expected - \let\relerr=\pgfmathresult - \noindent - log(#1)\hfill= - \expected;\hfill% - actual=\actual;\hfill% - abserr=\abserr;\hfill% - relerr=\relerr;\hfill% - \endgroup - \par -}% -%-------------------------------------------------- -% \def\showlowlevelfloat#1#2e#3\relax{% -% \ensuremath{[#1] \cdot #2 \cdot 10^{#3}}% -% }% -%-------------------------------------------------- -\long\def\showlowlevelfloatmacro#1{#1} - -\long\def\showlowlevelfloatmacrolong#1{% - #1 is decomposed into - - {% - \gdef\testerror{}% - \pgfmathfloattoregisters{#1}{\count0 }{\dimen0 }{\count1 }% - pgfmathfloattoregisters: flags \the\count0; M=\the\dimen0; E=\the\count1 - \ifx\testerror\empty - \else - \par (caught \texttt{\testerror})% - \fi - }% - - {% - \gdef\testerror{}% - pgfmathfloattoregisterstok: \pgfmathfloattoregisterstok{#1}{\count0 }{\toks0 }{\count1 }% - flags \the\count0; M=\the\toks0; E=\the\count1 - \ifx\testerror\empty - \else - \par (caught \texttt{\testerror})% - \fi - }% - - {% - \gdef\testerror{}% - pgfmathfloatgetflags \pgfmathfloatgetflags{#1}{\count0 } - flags \the\count0; - \ifx\testerror\empty - \else - \par (caught \texttt{\testerror})% - \fi - }% - - \medskip - %\expandafter\showlowlevelfloat#1\relax -}% - -\def\showsinglenumberparsing#1{% -%\tracingmacros=2\tracingcommands=2 - \begingroup - \message{PARSING NUMBER #1...}% - \gdef\testerror{}% - \pgfmathfloatparsenumber{#1}% - \let\resultasfloat=\pgfmathresult - \pgfmathfloattofixed\resultasfloat - \let\resultasfixed=\pgfmathresult - \[ #1 \mapsto \resultasfloat = \showlowlevelfloatmacro\resultasfloat \mapsto \resultasfixed - \] - \ifx\testerror\empty - \else - \par (caught \texttt{\testerror})% - \fi - \endgroup -%\tracingmacros=0\tracingcommands=0 -} - -\def\pretty#1{% - \message{Pretty-printing #1...}% - \pgfmathprintnumberto{#1}\result - {\pgfkeys{/pgf/number format/showpos}\pgfmathprintnumberto{#1}\resultpos\global\let\resultpos=\resultpos}% - \[ #1 \mapsto \pgfmathprintnumber{#1} [=\resultpos] \] - \message{#1 mapsto \meaning\result}% -} - -\begin{document} -\maketitle - - -%-------------------------------------------------- -% \showit{2.8128} -% log(12)=\pgfmathlog{1.2}\pgfmathadd{\pgfmathresult}{2.30258}\pgfmathresult\par -% \showit{1.2} -% \showit{4.0} -% log(1200)=\pgfmathlog{1.2}\pgfmathadd{\pgfmathresult}{6.9077}\pgfmathresult\par -% log(6.241e-7)=\pgfmathlog{6.241}\pgfmathadd{\pgfmathresult}{-16.11809}\pgfmathresult\par -%-------------------------------------------------- - -\testsection{Conversion to normalised floating point numbers basis 10} -\showsinglenumberparsing{123.41251}% -\showsinglenumberparsing{1023.52} -\showsinglenumberparsing{123412.51}% -\showsinglenumberparsing{12341251.0}% -\showsinglenumberparsing{-12341251.0}% -\showsinglenumberparsing{1.2341251}% -\showsinglenumberparsing{8.02410024} -\showsinglenumberparsing{8.024100} -\showsinglenumberparsing{0001234.3100} -\showsinglenumberparsing{0001234.00001} -\showsinglenumberparsing{0001000.00001} -\showsinglenumberparsing{0001000.00001000} -\showsinglenumberparsing{0.12341251}% -\showsinglenumberparsing{0.0012341251}% -\showsinglenumberparsing{0.00000012341251}% -\showsinglenumberparsing{-0.00000012341251}% -\showsinglenumberparsing{10} -\showsinglenumberparsing{100.351} -\showsinglenumberparsing{100.35100} -\showsinglenumberparsing{100.35100234} -\showsinglenumberparsing{100.0035100234} -\showsinglenumberparsing{100} -\showsinglenumberparsing{99999} -\showsinglenumberparsing{999.000} - -%\tracingmacros=2 \tracingcommands=2 -\showsinglenumberparsing{8.31160034e-02}% -\showsinglenumberparsing{2.54685628e-02}% -\showsinglenumberparsing{7.40715288e-03}% -\showsinglenumberparsing{2.10192154e-03}% -\showsinglenumberparsing{5.87352989e-04}% -\showsinglenumberparsing{-1.62269942e-04}% -\showsinglenumberparsing{4.44248889e-05}% -\showsinglenumberparsing{1.20714122e-05}% -\showsinglenumberparsing{3.26101452e-06}% -\showsinglenumberparsing{3261.01452e-06}% -\showsinglenumberparsing{0.000326101452e-06}% -\showsinglenumberparsing{1.2345e-12}% -\showsinglenumberparsing{1.2345e+12}% - -\message{SPECIAL CASE 0}% -\showsinglenumberparsing{0} -\showsinglenumberparsing{-0} -\showsinglenumberparsing{-0.000} -\showsinglenumberparsing{+0.000} -\showsinglenumberparsing{+0} -\showsinglenumberparsing{-1} -\showsinglenumberparsing{1.0e1} -\showsinglenumberparsing{1e1} -\showsinglenumberparsing{1141} -\showsinglenumberparsing{-53e-5} - -\testsubsection{Error handling} -{ - \pgfkeys{ - /pgf/fpu/handlers/empty number/.code 2 args={% - \gdef\testerror{handlers/empty number=\{#1\}\{#2\}}% - }, - /pgf/fpu/handlers/invalid number/.code 2 args={% - \gdef\testerror{handlers/invalid number=\{#1\}\{#2\}}% - }, - /pgf/fpu/handlers/wrong lowlevel format/.code 2 args={% - \gdef\testerror{handlers/wrong lowlevel format=\{#1\}\{#2\}}% - }, - } - \showsinglenumberparsing{-53e-5 not terminated} - %\showsinglenumberparsing{-53e-} - \showsinglenumberparsing{} - \showsinglenumberparsing{ ASDZ@414e12} - - This one has trailing spaces and should work: - \showsinglenumberparsing{10 } - - This one has leading spaces and should work: - \showsinglenumberparsing{ 10} - - \testsubsection{Error handling of decompose routines} - - \pgfmathfloatparsenumber{100} - \showlowlevelfloatmacrolong{\pgfmathresult} - - \showlowlevelfloatmacrolong{132} - - \showlowlevelfloatmacrolong{Z} -} - -\testsection{logarithms, compared with PGF arithmetics} - -\compare{0.1}{-2.30259} -\compare{0.12}{-2.12026} -\compare{0.2}{-1.60944} -\compare{0.3}{-1.20397} -\compare{0.4}{-0.916291} -\compare{0.5}{-0.693147} -\compare{0.6}{-0.510826} -\compare{0.7}{-0.356675} -\compare{0.75}{-0.287682} -\compare{0.8}{-0.223144} -\compare{0.823}{-0.194799} -\compare{0.9}{-0.105361} -\compare{0.96}{-0.040822} -\compare{1.2}{0.182322} -\compare{1.5}{0.405465} -\compare{1.6}{0.470004} -\compare{9.0}{2.1972245773} -\compare{9.2}{2.2192034} -\compare{9.3}{2.23001440} -\compare{9.7}{2.27212588} -\compare{10.0}{2.302585092} -\compare{100.0}{4.605170185} -\compare{1351.0}{7.208600337} -\compare{9752.0}{9.185227671} -\compare{9600.0}{9.169518377} - -\vskip1cm -\compare{0.000142}{-8.8596835} -\compare{0.0054124}{-5.219062661} -\compare{0.000912697124}{-6.9991064} - -\vskip1cm -\compare{8.31160034e-02}{-2.48751801563782}% -\compare{2.54685628e-02}{-3.67031041875206}% -\compare{7.40715288e-03}{-4.90530914022879}% -\compare{2.10192154e-03}{-6.16490333357987}% -\compare{5.87352989e-04}{-7.43988457474844}% -\compare{1.62269942e-04}{-8.72624930084187}% -\compare{4.44248889e-05}{-10.0217106847708}% -\compare{1.20714122e-05}{-11.3246705288704}% -\compare{3.26101452e-06}{-12.6334722085451}% - -\vskip1cm -\compare{5}{1.6094379124341}% -\compare{17}{2.83321334405622}% -\compare{39}{3.66356164612965}% -\compare{49}{3.89182029811063}% -\compare{129}{4.85981240436167}% -\compare{321}{5.77144112313002}% -\compare{769}{6.64509096950564}% -\compare{1793}{7.49164547360513}% -\compare{4097}{8.31801027754687}% -\compare{9217}{9.12880488399366}% - - -\testsection{Test for prettyprinter} -%\tracingmacros=2\tracingcommands=2 -\message{PRETTY PRINTING} -{ -\twocolumn -\def\prettytest{% - \pretty{1} - \pretty{1.0} - \pretty{-1.02311} - \pretty{-11241.02311} - \pretty{-11241} - \pretty{8124.99999} - \pretty{8124.849999} - \pretty{8124.843333} - \pretty{8.82} - \pretty{8.5} - \pretty{9.} - \pretty{5.9} - \pretty{-0.00001} - \pretty{-1.00001} - \pretty{-0.559} - \pretty{-0.554} - \pretty{-0.00000141} - \pretty{1.234e10} - \pretty{123456781} - \pretty{1234} - \pretty{8} - \pretty{-9.995} - \pretty{-0.015} - \pretty{-0.1} - \pretty{-0.15} - \pretty{0.15} - \pretty{-0} - \pretty{0} - \pretty{9.00} - \pretty{200.01} - \pretty{200.0000} - \pretty{1.5e-7} - \pretty{0.00035} - \pretty{0.00005} - \pretty{nan} - \pretty{inf} - \pretty{-inf} - \pretty{10} - \pretty{100} - \pretty{200} - \pretty{500} - \pretty{1000} - \pretty{30000} - \pretty{600000} - \pretty{1000000} - \pretty{30000000} - \pretty{600000000} - \pretty{1000000000} - \pretty{-10} - \pretty{-100} - \pretty{-200} - \pretty{-500} - \pretty{-1000} - \pretty{-30000} - \pretty{-600000} - \pretty{-1000000} - \pretty{-30000000} - \pretty{-600000000} - \pretty{-1000000000} -} - -\testsubsection{STD format} -\pgfqkeys{/pgf/number format}{std} -\prettytest - -{ -\testsubsubsection{precision 0} -\pgfqkeys{/pgf/number format}{precision=0} -\prettytest -} - -{ -\testsubsection{FIXED format} -\testsubsubsection{with period} -\pgfqkeys{/pgf/number format}{fixed,use period} -\prettytest - -{ -\testsubsubsection{precision 0} -\pgfqkeys{/pgf/number format}{precision=0} -\prettytest -} -{ -\testsubsubsection{skip 0.=true} -\pgfqkeys{/pgf/number format}{skip 0.=true} -\prettytest -} - -{ -\testsubsubsection{1000 sep; min exponent for 1000 sep=4} -\pgfqkeys{/pgf/number format}{1000 sep=',min exponent for 1000 sep=4} -\prettytest -} - -\testsubsubsection{with comma} -\pgfqkeys{/pgf/number format}{fixed,use comma} -\prettytest -} - - -{ -\testsubsection{FIXED ZEROFILL format} -\testsubsubsection{with period} -\pgfqkeys{/pgf/number format}{fixed,fixed zerofill,use period} -\prettytest - -{ -\testsubsubsection{precision 0} -\pgfqkeys{/pgf/number format}{precision=0} -\prettytest -} - -\testsubsubsection{with comma} -\pgfqkeys{/pgf/number format}{fixed,fixed zerofill,use comma} -%\tracingmacros=2\tracingcommands=2 -\prettytest -%\tracingmacros=0\tracingcommands=0 -} - -{ -\testsubsection{sci format} -\testsubsubsection{with period} -\pgfqkeys{/pgf/number format}{sci,use period} -\prettytest - -{ -\testsubsubsection{precision 0} -\pgfqkeys{/pgf/number format}{precision=0} -\prettytest -} - -\testsubsubsection{with comma} -\pgfqkeys{/pgf/number format}{sci,use comma} -\prettytest - -%\testsubsection{may skip mantisse} -%\pgfqkeys{/pgf/number format}{sci may skip mantisse=true} -%\prettytest - -}{ -\testsubsection{sci format zerofill} -\testsubsubsection{with period} -\pgfqkeys{/pgf/number format}{sci,sci zerofill,use period} -\prettytest - -\testsubsubsection{with comma} -\pgfqkeys{/pgf/number format}{sci,sci zerofill,use comma} -\prettytest - -\testsubsubsection{e-style} -\pgfqkeys{/pgf/number format}{sci e} -\prettytest - -\testsubsubsection{subscript-style} -\pgfqkeys{/pgf/number format}{sci subscript} -\prettytest - -\testsubsubsection{subscript-style + period + no zero fill} -\pgfqkeys{/pgf/number format}{sci subscript,use period,sci} -\prettytest - -\testsubsubsection{subscript-style precision 4} -\pgfqkeys{/pgf/number format}{sci subscript,precision=4} -\prettytest -} - -\testsubsection{int trunc format} -\pgfqkeys{/pgf/number format}{int trunc} -\prettytest - -\testsubsection{int detect format} -\pgfqkeys{/pgf/number format}{int detect} -\prettytest - -\testsubsection{frac} -\pgfqkeys{/pgf/number format}{frac} -\pretty{0.333333333333333} -\pretty{0.5} -\pretty{2.133333333333325e-01}% -\pretty{0.12} -\pretty{2.666666666666646e-02}% -\pretty{-1.333333333333334e-02}% -\pretty{7.200000000000000e-01}% -\pretty{6.666666666666667e-02}% -\pretty{1.333333333333333e-01}% -\pretty{-1.333333333333333e-02}% -\pretty{8.533333333333298e-01} -\pretty{8.533333e-01} -} -\onecolumn - -\testsection{Pretty printing using the relative style} -{ -\long\def\TESTIT#1#2{% - \gdef\temptable{\begin{tabular}}% - \gdef\header{l}% - \def\n{\noexpand\n}% - \foreach \number in {#2} {% - \xdef\header{\header c}% - }% - \toks0=\expandafter{\temptable}% - \xdef\temptable{\the\toks0 {\header}\n}% - % - \toks0=\expandafter{\temptable}% - \toks1={}% - \xdef\temptable{\the\toks0 \the\toks1}% - \foreach \number in {#2} {% - \toks0=\expandafter{\temptable}% - \toks1=\expandafter{\number}% - \xdef\temptable{\the\toks0 & \noexpand\texttt{\the\toks1}}% - }% - \toks0=\expandafter{\temptable}% - \xdef\temptable{\the\toks0 \noexpand\\\n}% - % - \toks0=\expandafter{\temptable}% - \toks1={With actual config:}% - \xdef\temptable{\the\toks0 \the\toks1}% - \foreach \number in {#2} {% - \toks0=\expandafter{\temptable}% - \toks1=\expandafter{\number}% - \xdef\temptable{\the\toks0 & \noexpand\pgfmathprintnumber{\the\toks1}}% - }% - \toks0=\expandafter{\temptable}% - \xdef\temptable{\the\toks0 \noexpand\\\n}% - % - \foreach \relativeto in {#1} {% - \toks0=\expandafter{\temptable}% - \xdef\temptable{\the\toks0 Relative to $10^{\relativeto}$:}% - \foreach \number in {#2} {% - \toks0=\expandafter{\temptable}% - \toks1=\expandafter{\number}% - \xdef\temptable{\the\toks0 & \noexpand\pgfmathprintnumber[relative={\relativeto}]{\the\toks1}}% - }% - \toks0=\expandafter{\temptable}% - \xdef\temptable{\the\toks0 \noexpand\\\n}% - }% - % - % - \toks0=\expandafter{\temptable}% - \toks1={\end{tabular}\n}% - \xdef\temptable{\the\toks0 \the\toks1}% - % - \def\n{^^J}% -%\message{TEMP-TABLE: \n\meaning\temptable\n}% - % - \let\n=\relax - \noindent - \temptable -}% -%\tracingmacros=2 \tracingcommands=2 - -\TESTIT{1,3}{1e-16,0,15,17,20} - -\TESTIT{0,1,3,4,5,6,7,8,9}{-100.123456,1e-16,1431,2000.1234,123456789.1234} - - - -\TESTIT{-4,-3,-2,-1,0,1,2,3}{0.0001,0.00012678,0.00013678,0.00016678,1.23,2.345,123.4,1234.5} - -{ -\subsection*{every relative/.style={sci}} -\pgfkeys{/pgf/number format/every relative/.style={sci}} -\TESTIT{-4,-3,-2,-1,0,1,2,3}{0.0001,0.00012678,0.00013678,0.00016678,1.23,2.345,123.4,1234.5} -} - -\TESTIT{-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9}{-123.123456,123.1234565} -{ -\subsection*{precision=4} -\pgfkeys{/pgf/number format/precision=4} -\TESTIT{-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9}{-123.123456,123.1234565} -} -} - -\begingroup -\testsection{testing pgfmathfloatadd} -\def\testfloataddnonsymmetric#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\first=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\second=\pgfmathresult - \message{computing #1 + #2; \first + \second}% - \pgfmathfloatadd\first\second - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \let\resultfixed=\pgfmathresult - \[ \text{pgfmathfloatadd: } \showlowlevelfloatmacro\first + \showlowlevelfloatmacro\second = \showlowlevelfloatmacro\result \; \bigl( #1 + #2 = \resultfixed \bigr). \] -}% -\def\testfloatadd#1#2{% - \testfloataddnonsymmetric{#1}{#2}% - \testfloataddnonsymmetric{#2}{#1}% -}% - -\testfloatadd{1}{100} -\testfloatadd{100}{100} -\testfloatadd{1}{2} -\testfloatadd{1}{0} -\testfloatadd{9.999999}{0} -\testfloatadd{9.9999}{0.0001} -\testfloatadd{9.9999e-5}{0.0001e-5} -\testfloatadd{1e6}{1e5} -\testfloatadd{1e6}{1e3} -\testfloatadd{1e6}{1} -\testfloatadd{1e6}{0.1} - -\testfloatadd{1}{-100} -\testfloatadd{100}{-100} -\testfloatadd{1}{-2} -\testfloatadd{1e6}{-1e5} -\testfloatadd{1e6}{-1e3} -\testfloatadd{1e6}{-1} -\testfloatadd{1e6}{-0.1} - -\testfloatadd{1e-3}{0} - -\testfloatadd{inf}{0} -\testfloatadd{inf}{5} -\testfloatadd{nan}{5} -\testfloatadd{0}{0} -\testfloatadd{-inf}{inf} -\testfloatadd{-inf}{40} -\endgroup - -\begingroup -\testsection{testing pgfmathfloatmultiplyfixed} -\def\testfloatmultiplyfixed#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\first=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \pgfmathfloattofixed\pgfmathresult - \let\second=\pgfmathresult - \message{computing #1 * #2; \first * \second}% - \pgfmathfloatmultiplyfixed\first\second - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \let\resultfixed=\pgfmathresult - \[ \text{pgfmathfloatmultiplyfixed: } \showlowlevelfloatmacro\first \cdot \second = \showlowlevelfloatmacro\result \; \bigl( #1 \cdot #2 = \resultfixed \bigr). \] -}% - -\testfloatmultiplyfixed{1}{100} -\testfloatmultiplyfixed{100}{100} -\testfloatmultiplyfixed{1}{2} -\testfloatmultiplyfixed{5}{2} -\testfloatmultiplyfixed{5e4}{10} -\testfloatmultiplyfixed{1}{0} -\testfloatmultiplyfixed{9.999999}{0} -\testfloatmultiplyfixed{9.9999}{0.0001} -\testfloatmultiplyfixed{9.9999e-5}{0.001} -\testfloatmultiplyfixed{1e6}{4} -\testfloatmultiplyfixed{1e6}{100} -\testfloatmultiplyfixed{1e6}{1} -\testfloatmultiplyfixed{1e6}{0.1} - -\testfloatmultiplyfixed{1}{-100} -\testfloatmultiplyfixed{100}{-100} -\testfloatmultiplyfixed{1}{-2} -\testfloatmultiplyfixed{1e6}{-9} -\testfloatmultiplyfixed{1e6}{-100} -\testfloatmultiplyfixed{1e6}{-1} -\testfloatmultiplyfixed{1e6}{-0.1} - -\testfloatmultiplyfixed{1e-3}{0} - -\testfloatmultiplyfixed{inf}{0} -\testfloatmultiplyfixed{inf}{5} -\testfloatmultiplyfixed{nan}{5} -\testfloatmultiplyfixed{0}{0} -\testfloatmultiplyfixed{-inf}{40} -\endgroup - - -\testsection{testing pgfmathfloatlessthan} -\def\testfloatlessthan#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\first=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\second=\pgfmathresult - \message{checking #1 <= #2; \first <= \second}% - \pgfmathfloatlessthan\first\second - \ifpgfmathfloatcomparison - \def\result{<}% - \else - \def\result{\ge}% - \fi - \[ \text{pgfmathfloatlessthan: } \bigl( \showlowlevelfloatmacro\first \bigr)\; = #1 \result #2\; \bigl( = \showlowlevelfloatmacro\second \big). \] -}% - -\testfloatlessthan{4}{5} -\testfloatlessthan{0}{2} -\testfloatlessthan{91751123}{241924} -\testfloatlessthan{-1}{-1} -\testfloatlessthan{-1231}{0} -\testfloatlessthan{10}{-5} -\testfloatlessthan{0}{0} -\testfloatlessthan{-0}{-0} -\testfloatlessthan{0}{14} -\testfloatlessthan{114812}{-123124123} -\testfloatlessthan{114812}{1241231451} -\testfloatlessthan{-141285}{29} -\testfloatlessthan{-141285}{0} -\testfloatlessthan{-141285}{-50} -\testfloatlessthan{-141285}{-12498149012} - -\testsection{float to fixed test} -\def\testpgfmathfloattofixed#1{% - \pgfmathfloatparsenumber{#1}% -%\tracingmacros=2\tracingcommands=2 - \let\argument=\pgfmathresult - \message{converting #1 = \argument\ to fixed point}% - \pgfmathfloattofixed\argument - \let\result=\pgfmathresult - \message{-> \result}% -%\tracingmacros=0\tracingcommands=0 - \[ \bigl( \showlowlevelfloatmacro\argument \bigr)\; = #1 \mapsto \result \] -}% -\testpgfmathfloattofixed{0} -\testpgfmathfloattofixed{5} -\testpgfmathfloattofixed{5.520241} -\testpgfmathfloattofixed{124.10241} -\testpgfmathfloattofixed{-121.248} -\testpgfmathfloattofixed{-12e-5} -\testpgfmathfloattofixed{412e3} -\testpgfmathfloattofixed{0.0001} -\testpgfmathfloattofixed{0.0} -\testpgfmathfloattofixed{-0.012125} -\testpgfmathfloattofixed{1.2e-1} -\testpgfmathfloattofixed{1.2e-2} -\testpgfmathfloattofixed{1.2e4} -\testpgfmathfloattofixed{1.2345e4} -\testpgfmathfloattofixed{1.234567e4} -\testpgfmathfloattofixed{1.51234e0} -\testpgfmathfloattofixed{15} -\testpgfmathfloattofixed{-20} - -\testsection{Testing pgfmathfloatmin and pgfmathfloatmax} -\def\testfloatminmax#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\first=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\second=\pgfmathresult -%\tracingmacros=2\tracingcommands=2 - \message{computing min/max #1 and #2}% - \pgfmathfloatmin\first\second - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \[ \min\{#1,#2\} = \min\{ \showlowlevelfloatmacro\first, \showlowlevelfloatmacro\second \} \; = \showlowlevelfloatmacro\result = \pgfmathresult \] - % - \pgfmathfloatmax\first\second - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \[ \max\{#1,#2\} = \max\{ \showlowlevelfloatmacro\first, \showlowlevelfloatmacro\second \} \; = \showlowlevelfloatmacro\result = \pgfmathresult \] -}% -\testfloatminmax{42}{56} -\testfloatminmax{-4122}{1256} -\testfloatminmax{1e12}{5.235412e24} -\testfloatminmax{-12}{-145} - -\testsection{Testing pgfmathfloatshift} -\def\pgfmathfloatshifttest#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\argument=\pgfmathresult - \message{computing mathshift #1 by #2}% - \pgfmathfloatshift\argument{#2}% - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \[ #1 \cdot 10^{#2} = \showlowlevelfloatmacro\argument \cdot 10^{#2} = \showlowlevelfloatmacro\result = \pgfmathresult \] -}% -\pgfmathfloatshifttest{4}{1} -\pgfmathfloatshifttest{4}{2} -\pgfmathfloatshifttest{4}{-1} -\pgfmathfloatshifttest{4}{-2} -\pgfmathfloatshifttest{0}{-2} -\pgfmathfloatshifttest{1.1415130}{-2} -\pgfmathfloatshifttest{1.1415130}{5} - -\testsection{Testing pgfmathfloatmultiply} -\begingroup -\def\pgfmathfloatmultiplytest#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\argumentb=\pgfmathresult - \message{computing mathmultiply #1 by #2}% - \pgfmathfloatmultiply\argumenta\argumentb% - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \[ #1 \cdot #2 = \showlowlevelfloatmacro\result = \pgfmathresult \] -}% -\def\tests{% - \pgfmathfloatmultiplytest{4}{1} - \pgfmathfloatmultiplytest{4}{2} - \pgfmathfloatmultiplytest{4}{-1} - \pgfmathfloatmultiplytest{4}{-2} - \pgfmathfloatmultiplytest{0}{-2} - \pgfmathfloatmultiplytest{1.1415130}{-2} - \pgfmathfloatmultiplytest{1.1415130}{5} - \pgfmathfloatmultiplytest{10}{10} - \pgfmathfloatmultiplytest{100}{100} - \pgfmathfloatmultiplytest{9999999}{9999999} - gnuplot for $\cdot$: $99999980000001.0$ - \pgfmathfloatmultiplytest{-10}{10} - \pgfmathfloatmultiplytest{-90}{3} - \pgfmathfloatmultiplytest{-90}{-3} - \pgfmathfloatmultiplytest{-inf}{nan} - \pgfmathfloatmultiplytest{-inf}{+inf} - \pgfmathfloatmultiplytest{1}{0} - \pgfmathfloatmultiplytest{1}{0} - \pgfmathfloatmultiplytest{1}{-0} - \pgfmathfloatmultiplytest{3.14159265358979}{2} -}% -\tests - -\testsection{Testing pgfmathfloatdivide} - -\def\pgfmathfloatmultiplytest#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\argumentb=\pgfmathresult - \message{computing mathdivide #1 by #2}% - \pgfmathfloatdivide\argumenta\argumentb% - \let\result=\pgfmathresult - \pgfmathfloattofixed\result - \[ #1 / #2 = \showlowlevelfloatmacro\result = \pgfmathresult \] -}% -\tests - -% #1/#2 expected #3 -\def\pgfmathfloattest#1#2#3{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\argumentb=\pgfmathresult - \pgfmathfloatparsenumber{#3}% - \let\reference=\pgfmathresult - \message{computing (#1/#2)}% - \pgfmathfloatdivide\argumenta\argumentb% - \let\resultfloat=\pgfmathresult - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \pgfmathfloatrelerror\resultfloat\reference - \pgfmathfloattosci\pgfmathresult - \[ #1/#2 = \result\quad (\text{error/r to }#3 = \pgfmathprintnumber\pgfmathresult)\] -}% -\pgfmathfloattest{83407811.0}{166815640.0}{0.499999946048224} -\endgroup - - -{ -\testsection{Testing pgfmathfloatsqrt} -% #1 : number -% #2 : the reference, sqrt (#1) -\def\pgfmathfloatsqrttest#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\reference=\pgfmathresult - \message{computing sqrt(#1)}% - \pgfmathfloatsqrt\argumenta% - \let\resultfloat=\pgfmathresult - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \pgfmathfloatrelerror\resultfloat\reference - \pgfmathfloattosci\pgfmathresult - \[ \sqrt{#1} = \result\quad (\text{rel. error } \pgfmathresult)\] -}% -\def\tests{% - \pgfmathfloatsqrttest{0}{0} - \pgfmathfloatsqrttest{1}{1} - \pgfmathfloatsqrttest{2}{1.414213562373} - \pgfmathfloatsqrttest{4}{2} - \pgfmathfloatsqrttest{16}{4} - \pgfmathfloatsqrttest{10}{3.162277660168} - \pgfmathfloatsqrttest{1000000}{1000} - \pgfmathfloatsqrttest{123456789}{1.111111106055556e+04} -}% -\tests -} - -{ -\testsection{Testing pgfmathfloatint} -% #1 : number -\def\pgfmathfloatinttest#1{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \message{computing int(#1)}% - \pgfmathfloatint\argumenta% - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \[ int(#1) = \result \] - % - \pgfmathfloatparsenumber{-#1}% - \let\argumenta=\pgfmathresult - \message{computing int(-#1)}% - \pgfmathfloatint\argumenta% - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \[ int(-#1) = \result \] -}% -\def\tests{% - \pgfmathfloatinttest{1.23} - \pgfmathfloatinttest{12.34} - \pgfmathfloatinttest{123.4} - \pgfmathfloatinttest{1234.} - \pgfmathfloatinttest{1234.1} - \pgfmathfloatinttest{1e-2} - \pgfmathfloatinttest{0} - \pgfmathfloatinttest{3.456789e4} - \pgfmathfloatinttest{3.456789e10} -}% -\tests -} - -{ -\testsection{Testing pgfmathfloatexp} -% #1 : number -% #2 : the reference, sqrt (#1) -\def\pgfmathfloattest#1#2{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\reference=\pgfmathresult - \message{computing (#1)}% - \pgfmathfloatexp\argumenta% - \let\resultfloat=\pgfmathresult - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \pgfmathfloatrelerror\resultfloat\reference - \pgfmathfloattosci\pgfmathresult - \[ \exp(#1) = \result\quad (\text{error/r to }#2 = \pgfmathresult)\] -}% -%\tracingmacros=2\tracingcommands=2 - \pgfmathfloattest{-700}{9.85967654375977e-305} - \pgfmathfloattest{-1.0000000e+02}{3.7200760e-44} - \pgfmathfloattest{-9.5918367e+01}{2.2038516e-42} - \pgfmathfloattest{-9.1836735e+01}{1.3056083e-40} - \pgfmathfloattest{-8.7755102e+01}{7.7346991e-39} - \pgfmathfloattest{-8.3673469e+01}{4.5821992e-37} - \pgfmathfloattest{-7.9591837e+01}{2.7145916e-35} - \pgfmathfloattest{-7.5510204e+01}{1.6081814e-33} - \pgfmathfloattest{-7.1428571e+01}{9.5272065e-32} - \pgfmathfloattest{-6.7346939e+01}{5.6441184e-30} - \pgfmathfloattest{-6.3265306e+01}{3.3436950e-28} - \pgfmathfloattest{-5.9183673e+01}{1.9808756e-26} - \pgfmathfloattest{-5.5102041e+01}{1.1735125e-24} - \pgfmathfloattest{-5.1020408e+01}{6.9521362e-23} - \pgfmathfloattest{-4.6938776e+01}{4.1185924e-21} - \pgfmathfloattest{-4.2857143e+01}{2.4399411e-19} - \pgfmathfloattest{-3.8775510e+01}{1.4454727e-17} - \pgfmathfloattest{-3.4693878e+01}{8.5632855e-16} - \pgfmathfloattest{-3.0612245e+01}{5.0730713e-14} - \pgfmathfloattest{-2.6530612e+01}{3.0053946e-12} - \pgfmathfloattest{-2.2448980e+01}{1.7804593e-10} - \pgfmathfloattest{-1.8367347e+01}{1.0547817e-08} - \pgfmathfloattest{-1.4285714e+01}{6.2487495e-07} - \pgfmathfloattest{-1.0204082e+01}{3.7018912e-05} - \pgfmathfloattest{-6.1224490e+00}{2.1930786e-03} - \pgfmathfloattest{-2.0408163e+00}{1.2992261e-01} - \pgfmathfloattest{2.0408163e+00}{7.6968898e+00} - \pgfmathfloattest{6.1224490e+00}{4.5598001e+02} - \pgfmathfloattest{1.0204082e+01}{2.7013219e+04} - \pgfmathfloattest{1.4285714e+01}{1.6003202e+06} - \pgfmathfloattest{1.8367347e+01}{9.4806349e+07} - \pgfmathfloattest{2.2448980e+01}{5.6165284e+09} - \pgfmathfloattest{2.6530612e+01}{3.3273501e+11} - \pgfmathfloattest{3.0612245e+01}{1.9711925e+13} - \pgfmathfloattest{3.4693878e+01}{1.1677761e+15} - \pgfmathfloattest{3.8775510e+01}{6.9181522e+16} - \pgfmathfloattest{4.2857143e+01}{4.0984595e+18} - \pgfmathfloattest{4.6938776e+01}{2.4280140e+20} - \pgfmathfloattest{5.1020408e+01}{1.4384068e+22} - \pgfmathfloattest{5.5102041e+01}{8.5214258e+23} - \pgfmathfloattest{5.9183673e+01}{5.0482727e+25} - \pgfmathfloattest{6.3265306e+01}{2.9907034e+27} - \pgfmathfloattest{6.7346939e+01}{1.7717559e+29} - \pgfmathfloattest{7.1428571e+01}{1.0496256e+31} - \pgfmathfloattest{7.5510204e+01}{6.2182039e+32} - \pgfmathfloattest{7.9591837e+01}{3.6837954e+34} - \pgfmathfloattest{8.3673469e+01}{2.1823582e+36} - \pgfmathfloattest{8.7755102e+01}{1.2928751e+38} - \pgfmathfloattest{9.1836735e+01}{7.6592653e+39} - \pgfmathfloattest{9.5918367e+01}{4.5375106e+41} - \pgfmathfloattest{1.0000000e+02}{2.6881171e+43} - \pgfmathfloattest{700}{1.014232054735e+304} -} - -{ -\testsection{Testing pgfmathfloatmod} -% #1 : operand 1 -% #2 : operand 2 -% #3 : the reference, #1 mod #2 -\def\pgfmathfloattest#1#2#3{% - \pgfmathfloatparsenumber{#1}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#2}% - \let\argumentb=\pgfmathresult - \pgfmathfloatparsenumber{#3}% - \let\reference=\pgfmathresult - \message{computing #1 mod #2}% - \pgfmathfloatmod\argumenta\argumentb% - \let\resultfloat=\pgfmathresult - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \pgfmathfloatrelerror\resultfloat\reference - \pgfmathfloattosci\pgfmathresult - \[ #1\text{ mod }#2 = \result\quad (\text{error/r to }#3 = \pgfmathresult)\] -}% -%\tracingmacros=2\tracingcommands=2 - \pgfmathfloattest{4}{3}{1} - \pgfmathfloattest{10}{10}{0} - \pgfmathfloattest{20}{6}{2} - \pgfmathfloattest{-100}{30}{-10} - \pgfmathfloattest{10.5}{5}{0.5} - \pgfmathfloattest{300.63}{360}{300.63} - \pgfmathfloattest{-20}{30}{-20} -} - -{ -\testsection{Testing Trigonometric functions} -% #1 : operator -% #2 : operand -% #3 : the reference, #2(#1) -\def\pgfmathfloattest#1#2#3{% - \pgfmathfloatparsenumber{#2}% - \let\argumenta=\pgfmathresult - \pgfmathfloatparsenumber{#3}% - \let\reference=\pgfmathresult - \message{computing \string#1(#2)}% - #1\argumenta% - \let\resultfloat=\pgfmathresult - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \pgfmathfloatrelerror\resultfloat\reference - \pgfmathfloattosci\pgfmathresult - \[ \string#1(#2) = \result\quad (\text{error/r to }#3 = \pgfmathresult)\] -}% -%\tracingmacros=2\tracingcommands=2 -\testsubsection{SIN} - \pgfmathfloattest\pgfmathfloatsin{-7.2000000e+02}{4.8985872e-16} - \pgfmathfloattest\pgfmathfloatsin{-6.5454545e+02}{9.0963200e-01} - \pgfmathfloattest\pgfmathfloatsin{-5.8909091e+02}{7.5574957e-01} - \pgfmathfloattest\pgfmathfloatsin{-5.2363636e+02}{-2.8173256e-01} - \pgfmathfloattest\pgfmathfloatsin{-4.5818182e+02}{-9.8982144e-01} - \pgfmathfloattest\pgfmathfloatsin{-3.9272727e+02}{-5.4064082e-01} - \pgfmathfloattest\pgfmathfloatsin{-3.2727273e+02}{5.4064082e-01} - \pgfmathfloattest\pgfmathfloatsin{-2.6181818e+02}{9.8982144e-01} - \pgfmathfloattest\pgfmathfloatsin{-1.9636364e+02}{2.8173256e-01} - \pgfmathfloattest\pgfmathfloatsin{-1.3090909e+02}{-7.5574957e-01} - \pgfmathfloattest\pgfmathfloatsin{-6.5454545e+01}{-9.0963200e-01} - \pgfmathfloattest\pgfmathfloatsin{0.0000000e+00}{0.0000000e+00} - \pgfmathfloattest\pgfmathfloatsin{6.5454545e+01}{9.0963200e-01} - \pgfmathfloattest\pgfmathfloatsin{1.3090909e+02}{7.5574957e-01} - \pgfmathfloattest\pgfmathfloatsin{1.9636364e+02}{-2.8173256e-01} - \pgfmathfloattest\pgfmathfloatsin{2.6181818e+02}{-9.8982144e-01} - \pgfmathfloattest\pgfmathfloatsin{3.2727273e+02}{-5.4064082e-01} - \pgfmathfloattest\pgfmathfloatsin{3.9272727e+02}{5.4064082e-01} - \pgfmathfloattest\pgfmathfloatsin{4.5818182e+02}{9.8982144e-01} - \pgfmathfloattest\pgfmathfloatsin{5.2363636e+02}{2.8173256e-01} - \pgfmathfloattest\pgfmathfloatsin{5.8909091e+02}{-7.5574957e-01} - \pgfmathfloattest\pgfmathfloatsin{6.5454545e+02}{-9.0963200e-01} - \pgfmathfloattest\pgfmathfloatsin{7.2000000e+02}{-4.8985872e-16} - - - -\testsubsection{COS} - \pgfmathfloattest\pgfmathfloatcos{-7.2000000e+02}{1.0000000e+00} - \pgfmathfloattest\pgfmathfloatcos{-6.5454545e+02}{4.1541501e-01} - \pgfmathfloattest\pgfmathfloatcos{-5.8909091e+02}{-6.5486073e-01} - \pgfmathfloattest\pgfmathfloatcos{-5.2363636e+02}{-9.5949297e-01} - \pgfmathfloattest\pgfmathfloatcos{-4.5818182e+02}{-1.4231484e-01} - \pgfmathfloattest\pgfmathfloatcos{-3.9272727e+02}{8.4125353e-01} - \pgfmathfloattest\pgfmathfloatcos{-3.2727273e+02}{8.4125353e-01} - \pgfmathfloattest\pgfmathfloatcos{-2.6181818e+02}{-1.4231484e-01} - \pgfmathfloattest\pgfmathfloatcos{-1.9636364e+02}{-9.5949297e-01} - \pgfmathfloattest\pgfmathfloatcos{-1.3090909e+02}{-6.5486073e-01} - \pgfmathfloattest\pgfmathfloatcos{-6.5454545e+01}{4.1541501e-01} - \pgfmathfloattest\pgfmathfloatcos{0.0000000e+00}{1.0000000e+00} - \pgfmathfloattest\pgfmathfloatcos{6.5454545e+01}{4.1541501e-01} - \pgfmathfloattest\pgfmathfloatcos{1.3090909e+02}{-6.5486073e-01} - \pgfmathfloattest\pgfmathfloatcos{1.9636364e+02}{-9.5949297e-01} - \pgfmathfloattest\pgfmathfloatcos{2.6181818e+02}{-1.4231484e-01} - \pgfmathfloattest\pgfmathfloatcos{3.2727273e+02}{8.4125353e-01} - \pgfmathfloattest\pgfmathfloatcos{3.9272727e+02}{8.4125353e-01} - \pgfmathfloattest\pgfmathfloatcos{4.5818182e+02}{-1.4231484e-01} - \pgfmathfloattest\pgfmathfloatcos{5.2363636e+02}{-9.5949297e-01} - \pgfmathfloattest\pgfmathfloatcos{5.8909091e+02}{-6.5486073e-01} - \pgfmathfloattest\pgfmathfloatcos{6.5454545e+02}{4.1541501e-01} - \pgfmathfloattest\pgfmathfloatcos{7.2000000e+02}{1.0000000e+00} - - -\testsubsection{TAN} - \pgfmathfloattest\pgfmathfloattan{-7.2000000e+02}{4.8985872e-16} - \pgfmathfloattest\pgfmathfloattan{-6.5454545e+02}{2.1896946e+00} - \pgfmathfloattest\pgfmathfloattan{-5.8909091e+02}{-1.1540615e+00} - \pgfmathfloattest\pgfmathfloattan{-5.2363636e+02}{2.9362649e-01} - \pgfmathfloattest\pgfmathfloattan{-4.5818182e+02}{6.9551528e+00} - \pgfmathfloattest\pgfmathfloattan{-3.9272727e+02}{-6.4266098e-01} - \pgfmathfloattest\pgfmathfloattan{-3.2727273e+02}{6.4266098e-01} - \pgfmathfloattest\pgfmathfloattan{-2.6181818e+02}{-6.9551528e+00} - \pgfmathfloattest\pgfmathfloattan{-1.9636364e+02}{-2.9362649e-01} - \pgfmathfloattest\pgfmathfloattan{-1.3090909e+02}{1.1540615e+00} - \pgfmathfloattest\pgfmathfloattan{-6.5454545e+01}{-2.1896946e+00} - \pgfmathfloattest\pgfmathfloattan{0.0000000e+00}{0.0000000e+00} - \pgfmathfloattest\pgfmathfloattan{6.5454545e+01}{2.1896946e+00} - \pgfmathfloattest\pgfmathfloattan{1.3090909e+02}{-1.1540615e+00} - \pgfmathfloattest\pgfmathfloattan{1.9636364e+02}{2.9362649e-01} - \pgfmathfloattest\pgfmathfloattan{2.6181818e+02}{6.9551528e+00} - \pgfmathfloattest\pgfmathfloattan{3.2727273e+02}{-6.4266098e-01} - \pgfmathfloattest\pgfmathfloattan{3.9272727e+02}{6.4266098e-01} - \pgfmathfloattest\pgfmathfloattan{4.5818182e+02}{-6.9551528e+00} - \pgfmathfloattest\pgfmathfloattan{5.2363636e+02}{-2.9362649e-01} - \pgfmathfloattest\pgfmathfloattan{5.8909091e+02}{1.1540615e+00} - \pgfmathfloattest\pgfmathfloattan{6.5454545e+02}{-2.1896946e+00} - \pgfmathfloattest\pgfmathfloattan{7.2000000e+02}{-4.8985872e-16} - - - -} - -{ - % #1 : expression - % #2 : the reference - \def\assertEquals#1#2{% - \pgfmathfloatparsenumber{#2}% - \let\reference=\pgfmathresult - \message{parsing expression #1...}% - \pgfmathparse{#1}% - \pgfmathfloatparsenumber{\pgfmathresult}% - \let\argumenta=\pgfmathresult - \let\resultfloat=\pgfmathresult - \pgfmathfloattosci\pgfmathresult - \let\result=\pgfmathresult - \pgfmathfloatrelerror\resultfloat\reference - \let\actualerror=\pgfmathresult - \pgfmathfloatgreaterthan{\pgfmathresult}{\THRESH}% - \ifpgfmathfloatcomparison - \begingroup - \pgfkeys{/pgf/fpu=false}% - \pgfmathparse{#1}% - \global\let\actualBasic=\pgfmathresult - \endgroup - \PackageError{pgf-fpu}{Got error: expected #1=#2, but was \result\space (error \actualerror; basic level returns \actualBasic)}{}% - \fi - \pgfmathfloattosci\actualerror - \[ #1 = \result \quad[= \resultfloat] \quad (\text{error/r to }#2 = \pgfmathresult)\] - }% - \def\mathparserTestCases{% - \assertEquals{1+1}{2} - \assertEquals{1234567*4}{4938268} - \assertEquals{exp(200)}{7.22597376812575e+86} - \assertEquals{rad(360)}{6.28318530717959} - \assertEquals{rad(180)}{3.14159265358979} - \assertEquals{deg(2*pi)}{360} - \assertEquals{deg(pi)}{180} - \assertEquals{ln(1)}{0} - \assertEquals{round(1.5)}{2} - \assertEquals{round(-1.5)}{-2} - \assertEquals{- (1.5)}{-1.5} - \assertEquals{(1e4 - 1e3) * 1e5}{900000000.0} - \assertEquals{4^2}{16} - \assertEquals{4^3}{64} - \assertEquals{4^-3}{0.015625} - \assertEquals{4^-6}{0.000244140625} - \assertEquals{111^4}{151807041} - \assertEquals{8^10}{1073741824} - \assertEquals{3^1.5}{5.19615242270663} - \assertEquals{16^5.5}{4194304} - \assertEquals{15^-0.25}{0.508132748154615} - \assertEquals{sec(45)}{1.4142136e+00} - \assertEquals{cot(30)}{1.7320508e+00} - \assertEquals{asin(7.0710678e-01)}{45} - \assertEquals{acos(8.6602540e-01)}{30} - \assertEquals{atan(5.7735027e-01)}{30} - \assertEquals{atan(16000)}{89.9964} - \assertEquals{atan(1e6)}{8.9999943e+01} - \assertEquals{atan(-1e6)}{-8.9999943e+01} - \assertEquals{-12^2}{-144}% - \assertEquals{0-12^2}{-144}% - \assertEquals{-(12)^2}{-144}% - \assertEquals{exp(-12^2)}{2.8946e-63}% - \assertEquals{round(98.8)}{99}% - \assertEquals{-pi}{-3.14159265358979}% - \assertEquals{2*(-pi)}{-6.28318530717959}% - \assertEquals{2*(-3)}{-6}% - \assertEquals{veclen(1,1)}{1.414213562373095}% - \assertEquals{veclen(1e5,6e5)}{6.082762530298220e+05}% - \assertEquals{cosh(5)}{74.20994852478784}% - \assertEquals{sinh(0.6)}{0.636653582148241}% - \assertEquals{tanh(0.6)}{0.537049566998035}% - - {\pgfkeys{/pgf/trig format=rad} - \assertEquals{atan2(4,5)}{0.674740942223553}% - \assertEquals{atan2(-4,5)}{-0.674740942223553}% - \assertEquals{atan2(4,-5)}{2.46685171136624}% - \assertEquals{atan2(-4,-5)}{-2.46685171136624}% - % - \assertEquals{atan2(5,4)}{0.89605538457134}% - \assertEquals{atan2(-5,4)}{-0.89605538457134}% - \assertEquals{atan2(5,-4)}{2.24553726901845}% - \assertEquals{atan2(-5,-4)}{-2.24553726901845}% - % - \assertEquals{atan2(4e-5,5)}{0}% - \assertEquals{atan2(4e-5,-5)}{3.1415126535899}% - } - % \assertEquals{ceil(1.5)}{2} - } - - - { - \testsection{Testing the FPU library (and math parser)} - \pgfkeys{/pgf/fpu} - %\tracingmacros=2\tracingcommands=2 - \mathparserTestCases - } - - { - \def\mathparserTestCases{% - \assertEquals{sin(90)}{1.0}% - \assertEquals{cos(90)}{0.0}% - \assertEquals{tan(45)}{1.0}% - \assertEquals{sec(45)}{1.41429}% - \assertEquals{cosec(30)}{2.0}% - \assertEquals{cot(15)}{3.73215}% - \assertEquals{asin(0.7071)}{44.99945}% - \assertEquals{acos(0.5)}{60}% - \assertEquals{atan(1)}{45}% - \assertEquals{atan(16001)}{90}% - \assertEquals{atan(-16001)}{-90}% - %\assertEquals{atan2(-4,3)}{-53.13011}% - }% - \testsection{Testing trig format=deg, basic layer (selected examples)} - %\tracingmacros=2\tracingcommands=2 - \mathparserTestCases - - \testsection{Testing trig format=deg, FPU (selected examples)} - \pgfkeys{/pgf/fpu} - \mathparserTestCases - } - - { - \pgfkeys{/pgf/trig format=rad} - \def\mathparserTestCases{% - \assertEquals{sin(pi/2)}{1.0}% - \assertEquals{cos(pi/2)}{0.0}% - \assertEquals{tan(pi/4)}{1.0}% - \assertEquals{sec(pi/4)}{1.41429}% - \assertEquals{cosec(rad(30))}{2.0}% - \assertEquals{cot(rad(15))}{3.73215}% - \assertEquals{asin(0.7071)}{0.785388564086562}% 44.99945}% - \assertEquals{acos(0.5)}{1.0471975511966}% - \assertEquals{atan(1)}{0.785398163397448}%45}% - \assertEquals{atan(16001)}{1.570796326794}% - \assertEquals{atan(-16001)}{-1.570796326794}% - %\assertEquals{atan2(-4,3)}{-53.13011}% - }% - \testsection{Testing trig format=rad, basic layer (selected examples)} - %\tracingmacros=2\tracingcommands=2 - \mathparserTestCases - - \testsection{Testing trig format=rad, FPU (selected examples)} - \pgfkeys{/pgf/fpu} - \mathparserTestCases - } -} -\end{document} diff --git a/graphics/pgf/base/source/planarity_script.h b/graphics/pgf/base/source/planarity_script.h deleted file mode 100644 index dd337fcc0e..0000000000 --- a/graphics/pgf/base/source/planarity_script.h +++ /dev/null @@ -1,11 +0,0 @@ -#include - -#include "PlanarizationLayout_script.h" - -struct planarity_script : - scripting::declarations -{ - void declare (scripting::script s) { - s.declare (new PlanarizationLayout_script); - } -}; diff --git a/graphics/pgf/base/source/tikzexternaltest.code.tex b/graphics/pgf/base/source/tikzexternaltest.code.tex deleted file mode 100644 index 153a074255..0000000000 --- a/graphics/pgf/base/source/tikzexternaltest.code.tex +++ /dev/null @@ -1,41 +0,0 @@ -\parskip=1cm -\parindent=0pt - -A small image with a filled circle follows here (with baseline): \tikz[baseline] \fill[red] (0,1cm) circle(2pt); - -\tikzsetnextfilename{\tikzexternalrealjob-setnextfilename} -The next one uses -\begin{tikzpicture}[baseline] - \draw (0,0) grid (4,4); -\end{tikzpicture} -an explizit file name. - -\begin{tikzpicture} - \node[draw,rounded corners] {A node with a ref (\ref{eq:1})}; -\end{tikzpicture} - -\begin{equation} - 1+1=3 - \label{eq:1} -\end{equation} - -\begin{tikzpicture} - \node[draw,rounded corners] {A node which contains a label\label{a:label:in:a:picture}}; -\end{tikzpicture} - -The label inside of a node is on page~\pageref{a:label:in:a:picture}. - -\expandafter\ifx\csname pgfplotslegendfromname\endcsname\relax -\else -The following picture exports a legend to the aux file (if possible). -\begin{tikzpicture} - \begin{axis}[legend entries={1,2,3,4},legend to name=legend:name] - \addplot {x}; - \addplot {x+1}; - \addplot {x+2}; - \addplot {x+3}; - \end{axis} -\end{tikzpicture} - -Here is the legend: \pgfplotslegendfromname{legend:name}. -\fi diff --git a/graphics/pgf/base/source/tikzexternaltest.sharedpreamble.tex b/graphics/pgf/base/source/tikzexternaltest.sharedpreamble.tex deleted file mode 100644 index d2577b01b1..0000000000 --- a/graphics/pgf/base/source/tikzexternaltest.sharedpreamble.tex +++ /dev/null @@ -1,20 +0,0 @@ -\documentclass[a4paper]{article} -\usepackage[utf8]{inputenc} - -\usepackage{tikz} -\usepackage{hyperref} - -\IfFileExists{pgfplots.sty}{% - \usepackage{pgfplots} -}{}% - -\IfFileExists{tikzlibraryexternal.code.tex}{% - \usetikzlibrary{external} -}{% - \message{TEST IS RUNNING IN COMPATIBILITY MODE}% - % a test to check for pgf 2.00 compatibility, to check whether the - % external library copy shipped with pgfplots works: - \usepgfplotslibrary{external} -}% - -\pgfkeys{/pgf/images/include external/.code={\href{file:#1}{\pgfimage{#1}}}} diff --git a/graphics/pgf/base/source/tikzexternaltest.tex b/graphics/pgf/base/source/tikzexternaltest.tex deleted file mode 100644 index 2aaef55eff..0000000000 --- a/graphics/pgf/base/source/tikzexternaltest.tex +++ /dev/null @@ -1,12 +0,0 @@ -\input tikzexternaltest.sharedpreamble.tex - -\tikzexternalize{tikzexternaltest} - -\author{Christian Feuers\"anger} -\title{Test with default config and Provided Basefilename} - -\begin{document} -\maketitle -\input{tikzexternaltest.code.tex} -\end{document} - diff --git a/graphics/pgf/base/source/tikzexternaltestmakefile.tex b/graphics/pgf/base/source/tikzexternaltestmakefile.tex deleted file mode 100644 index 232489823e..0000000000 --- a/graphics/pgf/base/source/tikzexternaltestmakefile.tex +++ /dev/null @@ -1,12 +0,0 @@ -\input tikzexternaltest.sharedpreamble.tex - -\tikzexternalize[mode=list and make] - -\author{Christian Feuers\"anger} -\title{Test with mode list and make, automatic Basefilename} - -\begin{document} -\maketitle -\input{tikzexternaltest.code.tex} -\end{document} - diff --git a/graphics/pgf/base/source/unittest_luamathparser.tex b/graphics/pgf/base/source/unittest_luamathparser.tex deleted file mode 100644 index 225927eb41..0000000000 --- a/graphics/pgf/base/source/unittest_luamathparser.tex +++ /dev/null @@ -1,562 +0,0 @@ -\documentclass{article} - -\makeatletter -\usepackage{pgf} -\usepgflibrary{luamath,fpu} - -\begin{document} - -X - -\def\SHOW#1{% - \dimen0=#1 % - #1 = \the\dimen0 -} - -\SHOW{1pt} - -\SHOW{1mm} - -\SHOW{1cm} - -\SHOW{1in} - -\SHOW{1ex} - -\SHOW{1em} - -\SHOW{1bp} - -\SHOW{1pc} - -\SHOW{1dd} - -\SHOW{1cc} - -\SHOW{1sp} - -%\tracingmacros=2 \tracingcommands=2 -% -\newif\ifcomparewithtex -\newif\ifcomparewithfpu -\pgfkeys{ - /ut/compare with TeX/.is if=comparewithtex, - /ut/compare with TeX=true, - /ut/compare with fpu/.is if=comparewithfpu, - /ut/compare with fpu=true, - /ut/.search also={/pgf/luamath}, - /pgf/luamath/show error message=true, - /pgf/luamath/enable TeX fallback=false, -} - -\newcount\numErrors - -% #1: options -% #2: expression -% #3: expected result -% #4: expected 'units declared' (1 or 0) -\def\parsertest{\pgfutil@ifnextchar[\parsertest@{\parsertest@[]}}% -\def\parsertest@[#1]#2#3#4{% - \begingroup - \pgfqkeys{/ut}{#1}% - \pgfluamathparse{#2}% - \let\actual=\pgfmathresult - \ifpgfmathunitsdeclared - \def\actualunitsdeclared{1}% - \else - \def\actualunitsdeclared{0}% - \fi - % - \ifcomparewithtex - \ifpgfluamathusedTeXfallback - \let\expectedTeX=\actual - \else - \pgfmathparse{#2}% - \let\expectedTeX=\pgfmathresult - \fi - \else - \def\expectedTeX{--}% - \fi - % - \edef\expected{#3}% - \def\success{1}% - \ifx\expected\empty - \ifx\actual\empty - \else - \def\success{0}% - \fi - \else - \ifx\actual\expected - \else - \def\success{0}% - \fi - \fi - % - \if1\success - \else - \message{FAILURE for #2 expected \expected\space but was \actual^^J}% - \global\advance\numErrors by1 - \fi - % - \if1\success - \def\expectedunitsdeclared{#4}% - \ifx\actualunitsdeclared\expectedunitsdeclared - \else - \def\success{0}% - \message{FAILURE for #2 expected units declared #4 but was \actualunitsdeclared^^J}% - \global\advance\numErrors by1 - \fi - \fi - % - \if1\success - \ifcomparewithtex - % check against PGF's basic layer as reference: - \dimen0=\actual pt % - \dimen1=\expectedTeX pt % - \advance\dimen0 by-\dimen1 - \ifdim\dimen0<0sp - \dimen0=-\dimen0 - \fi - \ifdim\dimen0 > 0.004pt % - \def\success{0}% - \message{FAILURE for #2 : matches expectations, but does NOT match TeX output (error \the\dimen0). expected \expectedTeX\space but was \actual^^J}% - \global\advance\numErrors by1 - \fi - % - % - \ifpgfmathunitsdeclared - \def\actualTeXunitsdeclared{1}% - \else - \def\actualTeXunitsdeclared{0}% - \fi - \ifx\actualTeXunitsdeclared\actualunitsdeclared - \else - \message{WARNING for #2 : matches ALL expectations, but TeX's output does NOT match TeX expected units declared (TeX returns \actualTeXunitsdeclared, expectation = LUA is \actualunitsdeclared)^^J}% - \fi - \fi - % - \ifcomparewithfpu - % check that FPU works as well. This - % * tests the FPU - % * tests that FPU values can be injected into the LUA backend: - \begingroup - \pgfkeys{/pgf/fpu,/pgf/fpu/output format=float}% - \pgfmathparse{#2}% - \xdef\actualfpu{\pgfmathresult}% - \ifpgfmathunitsdeclared - \xdef\actualfpuunitsdeclared{1}% - \else - \xdef\actualfpuunitsdeclared{0}% - \fi - \endgroup - % - \pgfkeys{/pgf/luamath/output format=fixed}% - \pgfluamathparse{abs(\actual - \actualfpu) > 0.004}% - \ifdim\pgfmathresult pt=1pt - \def\success{0}% - \pgfluamathparse{abs(\actual - \actualfpu)}% - \message{FAILURE for #2 : matches expectations, but does NOT match output of FPU (error \pgfmathresult). fpu=\actualfpu\space lua=\actual^^J}% - \global\advance\numErrors by1 - \fi - \fi - % - \fi - % - \message{#2 = \actual\space (pgf=\expectedTeX) \if1\success OK\else FAILURE\fi^^J}% - \endgroup -}% - -\parsertest{1}{1.0}{0} -\parsertest{ 1}{1.0}{0} -\parsertest{-123}{-123.0}{0} -\parsertest{+123}{123.0}{0} -\parsertest{+1.23}{1.23}{0} -\parsertest{+.123}{0.123}{0} -\parsertest{1.23}{1.23}{0} -\parsertest{1.}{1.0}{0} -\parsertest{0.123}{0.123}{0} -\parsertest{.123}{0.123}{0} -\parsertest{1e4}{10000.0}{0} -\parsertest{1e-4}{0.0001}{0} -\parsertest{1e+4}{10000.0}{0} -% only supported by FPU -\parsertest[compare with TeX=false]{1Y1.23e4]}{12300.0}{0} -\parsertest{1.23e-004}{0.000123}{0} -\parsertest{004}{4.0}{0} -\parsertest{1 + 10}{11.0}{0} -\parsertest{1 - 10}{-9.0}{0} -\parsertest{(1)}{1.0}{0} -\parsertest{3 + 5*9 / (1+1) - 12}{13.5}{0} -\parsertest{pi}{3.141593}{0} -\parsertest{sin(0)}{0.0}{0} -\parsertest{max(0,1)}{1.0}{0} -\parsertest{min(0.01,-5)}{-5.0}{0} -\parsertest{sin(90)}{1.0}{0} -\parsertest{cos(90)}{0.0}{0} -\parsertest{pow(2,3)}{8.0}{0} -\parsertest{-pow(2,3)}{-8.0}{0} -\parsertest{-pi}{-3.141593}{0} -% this is actually UNSUPPORTED by TeX: -\parsertest[compare with TeX=false]{inf}{inf}{0} -\parsertest[compare with TeX=false]{INF}{inf}{0} -\parsertest{not(100)}{0.0}{0}% non-trivial since the function is pgfluamathfunctions.notPGF -\parsertest{2^2}{4.0}{0} -% only supported by FPU -\parsertest[compare with TeX=false]{1Y2.0e0]^2}{4.0}{0} -\parsertest{0-2^2}{-4.0}{0} -\parsertest{-2^2}{-4.0}{0} -\parsertest{pi^2}{9.869604}{0} -\parsertest{2^2+2}{6.0}{0} -\parsertest{2^2-1}{3.0}{0} -\parsertest{-1 + 4}{3.0}{0} -\parsertest{2^2*5}{20.0}{0} -\parsertest{2^(2+2)}{16.0}{0} -\parsertest{multiply(2,3)^2}{36.0}{0} -\parsertest{(2+3)^2}{25.0}{0} -\parsertest{(2 + 3 ) ^ 2}{25.0}{0} -\parsertest{2^add(1,1)}{4.0}{0} -\parsertest{3!}{6.0}{0} -\parsertest{1+3!}{7.0}{0} -\parsertest{2*3!}{12.0}{0} -\parsertest{3! + 1}{7.0}{0} -\parsertest{3 !}{6.0}{0} -\parsertest{3*2+4}{10.0}{0} -\pgfmathdeclarefunction{x}{0}{\def\pgfmathresult{4}}% -\pgfmathdeclarefunction{N1}{3}{\pgfmathparse{#1+#2+#3}}% -\directlua{ -function pgfluamathfunctions.x() - return 4 -end -function pgfluamathfunctions.N1(x,m,n) - return x+m+n -end -} -\parsertest{2^x}{16.0}{0} -\parsertest{exp(-x^2)}{0.0}{0} % requires output format=fpu -\parsertest{N1(1,2,3)}{6.0}{0} -\parsertest{ 1 + 2 * 4 ^ 2 }{33.0}{0} -\parsertest{-x + 4}{0.0}{0} -\parsertest{-x * 4}{-16.0}{0} -\parsertest{-x * - 4}{16.0}{0} -\parsertest{2*pi r}{360.0}{0} -\parsertest{6.28318530717959 r}{360.0}{0} -\parsertest{sin(2*pi r)}{-0.0}{0} -\parsertest{1.5707963267949r + 1.5707963267949r}{180.0}{0} -\parsertest{1 ? 42 : 0}{42.0}{0} -\parsertest{0 ? 42 : 0}{0.0}{0} -\parsertest{-1 + 1 ? 42 : 0}{0.0}{0} -\parsertest{1 + (1 ? 42 : 0)}{43.0}{0} -\parsertest{1 ? 42 : 0 ? 5 : 6}{5.0}{0} -\parsertest{(1 ? 42 : 0) ? 5 : 6}{5.0}{0} -\parsertest{43 == 43}{1.0}{0} -\parsertest{43 == 42}{0.0}{0} -\parsertest{43 != 43}{0.0}{0} -\parsertest{43 != 42}{1.0}{0} -\parsertest{43 > 42}{1.0}{0} -\parsertest{43 > 44}{0.0}{0} -\parsertest{43 < 42}{0.0}{0} -\parsertest{43 < 44}{1.0}{0} -\parsertest{43 <= 44}{1.0}{0} -\parsertest{43 >= 44}{0.0}{0} -\parsertest{43 >= 44 == 1}{0.0}{0} -\parsertest{!1}{0.0}{0} -\parsertest{! 1}{0.0}{0} -\parsertest{! -1}{0.0}{0} -\parsertest{--1}{1.0}{0} -\parsertest{! !1}{1.0}{0} -\parsertest{3! - !0}{5.0}{0} -\parsertest{1 && 1 }{1.0}{0} -\parsertest{1 && 0 || 1 }{1.0}{0} -\parsertest{1 && 0 && 1 }{0.0}{0} -\parsertest{1 || 0 }{1.0}{0} -\parsertest{0 || 0 || 1 }{1.0}{0} - -% I test every function here to see that it is connected correctly -\parsertest{abs(1)}{1.0}{0} -\parsertest{add(1,2)}{3.0}{0} -\parsertest{and(1,1)}{1.0}{0} -% \parsertest{array(1)}{1.0}{0} -\parsertest{asin(0.7071)}{44.999451}{0} -\parsertest{atan(1)}{45.0}{0} -\parsertest{atan2(-4,3)}{-53.130102}{0} -% \parsertest{bin(1)}{1.0}{0} -\parsertest{cos(60)}{0.5}{0} -\parsertest{cosec(30)}{2.0}{0} -\parsertest{cosh(0.5)}{1.127626}{0} -\parsertest{cot(15)}{3.732051}{0} -\parsertest{deg(2*pi)}{360.0}{0} -% \parsertest{depth(1)}{1.0}{0} -\parsertest[compare with fpu=false]{div(1,2)}{0.0}{0} -\parsertest{divide(1,2)}{0.5}{0} -\parsertest{e}{2.718282}{0} -\parsertest{equal(1,2)}{0.0}{0} -\parsertest{factorial(3)}{6.0}{0} -\parsertest{false}{0.0}{0} -\parsertest{floor(0)}{0.0}{0} -\parsertest{floor(0.6)}{0.0}{0} -\parsertest{floor(1.6)}{1.0}{0} -\parsertest{floor(1)}{1.0}{0} -\parsertest{floor(100)}{100.0}{0} -\parsertest{floor(-100)}{-100.0}{0} -\parsertest{floor(-0.6)}{-1.0}{0} -\parsertest{floor(-1.6)}{-2.0}{0} -\parsertest{floor(-15000.6)}{-15001.0}{0} -\parsertest{floor(15000.6)}{15000.0}{0} -\parsertest{ceil(0)}{0.0}{0} -\parsertest{ceil(0.6)}{1.0}{0} -\parsertest{ceil(1.6)}{2.0}{0} -\parsertest{ceil(-0.6)}{-0.0}{0} -\parsertest{ceil(-1.6)}{-1.0}{0} -\parsertest{ceil(1)}{1.0}{0} -\parsertest{ceil(100)}{100.0}{0} -\parsertest{ceil(-100)}{-100.0}{0} -\parsertest{ceil(-15000.6)}{-15000.0}{0} -\parsertest{ceil(15000.6)}{15001.0}{0} -\parsertest[compare with fpu=false]{frac(1.1)}{0.1}{0} -\parsertest[compare with fpu=false]{frac(-1.1)}{0.1}{0} -\parsertest[compare with fpu=false]{gcd(42,56)}{14.0}{0} -\parsertest{greater(1,0)}{1.0}{0} -% \parsertest{height(1)}{1.0}{0} -% \parsertest{hex(1)}{1.0}{0} -% \parsertest{Hex(1)}{1.0}{0} -\parsertest{int(1.2)}{1.0}{0} -\parsertest{int(-1.2)}{-1.0}{0} -\parsertest{ifthenelse(1,2,3)}{2.0}{0} -\parsertest[compare with fpu=false]{iseven(2)}{1.0}{0} -\parsertest{isodd(1)}{1.0}{0} -\parsertest[compare with fpu=false]{isprime(3)}{1.0}{0} -\parsertest{less(1,2)}{1.0}{0} -\parsertest{ln(e)}{1.0}{0} -\parsertest{log10(100)}{2.0}{0} -\parsertest{log2(2)}{1.0}{0} -\parsertest{max(1,2)}{2.0}{0} -\parsertest{min(1,2)}{1.0}{0} -\parsertest{mod(20,6)}{2.0}{0} -\parsertest{mod(-100,30)}{-10.0}{0} -\parsertest[compare with fpu=false]{Mod(-100,30)}{20.0}{0} -\parsertest{multiply(1,2)}{2.0}{0} -\parsertest{neg(1)}{-1.0}{0} -\parsertest{not(1)}{0.0}{0} -\parsertest{notequal(1,1)}{0.0}{0} -\parsertest{notgreater(1,1)}{1.0}{0} -\parsertest{notless(1,1)}{1.0}{0} -%\parsertest{oct(1)}{1.0}{0} -\parsertest{or(1,0)}{1.0}{0} -\parsertest{pi}{3.141593}{0} -\parsertest{pow(2,2)}{4.0}{0} -\parsertest{rad(180)}{3.141593}{0} -% done below \parsertest{rand(1)}{1.0}{0} -% done below \parsertest{random(1)}{1.0}{0} -\parsertest[compare with fpu=false]{real(1)}{1.0}{0} -% done below \parsertest{rnd(1)}{1.0}{0} -\parsertest{round(1.5)}{2.0}{0} -\parsertest{round(1.2)}{1.0}{0} -\parsertest{round(1.9)}{2.0}{0} -\parsertest{round(-1.9)}{-2.0}{0} -\parsertest{round(-1.2)}{-1.0}{0} -% \parsertest{scalar(1)}{1.0}{0} -\parsertest{sec(45)}{1.414214}{0} -\parsertest{sign(-1)}{-1.0}{0} -\parsertest{sin(60)}{0.866025}{0} -\parsertest{sinh(0.5)}{0.521095}{0} -\parsertest{sqrt(4)}{2.0}{0} -\parsertest{subtract(1,1)}{0.0}{0} -\parsertest{tan(45)}{1.0}{0} -\parsertest{tanh(0.5)}{0.462117}{0} -\parsertest{true}{1.0}{0} -\parsertest{veclen(12,5)}{13.0}{0} -%\parsertest{width(1)}{1.0}{0} - -\parsertest{0 <0.1 && 4 <0.1}{0.0}{0} -\parsertest{0 <0.1 || 4 <0.1}{1.0}{0} -{ -\pgfkeys{/pgf/declare function={ - xx=4; - yy=4; -}} -\parsertest{abs(xx-yy)<0.1 ? -42 : 42}{-42.0}{0} -\parsertest{abs(xx-yy)<0.1 || abs(xx-0.5)<0.1}{1.0}{0} -\parsertest{0 <0.1 || 4 <0.1}{1.0}{0} -\parsertest{(abs(xx-yy)<0.1) || (abs(xx-0.5)<0.1)}{1.0}{0} -\parsertest{abs(xx-yy)<0.1 || abs(xx-0.5)<0.1 ? -42 : 42}{-42.0}{0} -\parsertest{4 < 2 || 5==5 ? -42 : 42}{-42.0}{0} -} - -\parsertest{1pt}{1.0}{1} -\parsertest{1mm}{2.845261}{1} -\parsertest{1cm}{28.452744}{1} -\parsertest{1in}{72.269989}{1} -% \parsertest{1ex}{4.305542}{1} -% \parsertest{1em}{10.000015}{1} -\parsertest{1bp}{1.003738}{1} -\parsertest{1dd}{1.070007}{1} -\parsertest{1cc}{12.840103}{1} -\parsertest{1sp}{0.000015}{1} -\parsertest{1pc}{12.0}{1} -% these TeX macros must be defined and set, of course! - - - -\count1=43 -% this is actually UNSUPPORTED by TeX: -\parsertest[compare with TeX=false,compare with fpu=false]{\count1}{43.0}{0} -% -\newdimen\luamathparse@dimen -\luamathparse@dimen=42pt -\parsertest{1*\luamathparse@dimen}{42.0}{1} -\parsertest{2\luamathparse@dimen}{84.0}{1} -% -\newcount\luamathparse@count -\luamathparse@count=42 -\parsertest{1*\luamathparse@count}{42.0}{0} - -% this is a BUG in TeX, but works in LUA...: -\parsertest[compare with TeX=false,compare with fpu=false]{0.5\luamathparse@count}{21.0}{0} -% -\setbox0=\hbox{1233} -\parsertest{\wd0}{20.000061}{1} -\parsertest{\ht0}{6.444443}{1} -\parsertest{\dp0}{0.0}{1} - -%-------------------------------------------------- -% FIXME : these cases are still missing: -% if false then -% -- arrays created via '{}' and indexed with '[]' -% -- strings with "" -% -- 'scalar' function -% -- hex/octal/binary input -% -- tex registers -% -- What happens for undefined functions!? --> return nil and let TeX invoke its parser (no warning!?) -% -- width/height/depth -% end -%-------------------------------------------------- - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% The following tests are just for the TeX part, not for the LUA part. -% -% - -\parsertest[output format=float,compare with TeX=false]{4+4}{1Y8.0e+00]}{0} - -\begingroup -\pgfmathdeclarefunction{testfct}{0}{\def\pgfmathresult{42.42}} -\parsertest[parser,compare with TeX=false,compare with fpu=false,show error message=false]{testfct}{}{0} -\parsertest[parser,enable TeX fallback]{testfct}{42.42}{0} - -\def\macro{1234} -\pgfkeys{/pgf/declare function={res(\x)=\x*\macro;}} -\parsertest[enable TeX fallback=true]{res(1)}{1234.0}{0} -\endgroup - -% Check that setseed is communicated to LUA: -\pgfmathsetseed{123} -\parsertest[compare with TeX=false,compare with fpu=false]{rnd}{0.788318}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{rnd}{0.203068}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{rand}{-0.302874}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{rand}{-0.276781}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{random}{0.134639}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{random}{0.375968}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{random(4)}{2.0}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{random(4)}{1.0}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{random(4,10)}{10.0}{0} -\parsertest[compare with TeX=false,compare with fpu=false]{random(4,10)}{8.0}{0} - -\begingroup -% Check that 'trig format' is property communicated to LUA and -% implemented correctly: -\parsertest{sin(50)}{0.766044}{0}% -\parsertest{cos(50)}{0.642788}{0}% -\parsertest{tan(50)}{1.191754}{0}% -\parsertest{asin(0.766044)}{49.999961}{0}% -\parsertest{acos(0.642788)}{49.999971}{0}% -\parsertest{atan(1.191754)}{50.00001}{0}% -\parsertest{atan2(-4,3)}{-53.130102}{0}% -\parsertest{cot(50)}{0.8391}{0}% -\parsertest{sec(50)}{1.555724}{0}% -\parsertest{cosec(50)}{1.305407}{0}% -% -\pgfkeys{/pgf/trig format=rad} -\parsertest{sin(0.5)}{0.479426}{0}% -\parsertest{cos(0.5)}{0.877583}{0}% -\parsertest{tan(0.5)}{0.546302}{0}% -\parsertest{asin(0.5)}{0.523599}{0}% -\parsertest{acos(0.5)}{1.047198}{0}% -\parsertest{atan(0.5)}{0.463648}{0}% -\parsertest{atan2(-4,3)}{-0.927295}{0}% -\parsertest{cot(0.5)}{1.830488}{0}% -\parsertest{sec(0.5)}{1.139494}{0}% -\parsertest{cosec(0.5)}{2.08583}{0}% -\endgroup - -\begingroup -\pgfkeys{/pgf/declare function={mu1(\x,\i)=\x^\i;}} - -\parsertest{mu1(5,2)}{25.0}{0} -% produces something different in TeX :-( See docs in LUA -\parsertest[compare with TeX=false]{mu1(-5,2)}{25.0}{0} - -\begingroup -\pgfkeys{/pgf/declare function={mu2=42;}} -\parsertest{mu2}{42.0}{0} -\endgroup -% should have been clean up: -\parsertest[show error message=false,compare with TeX=false,compare with fpu=false]{mu2}{}{0} -% ... but this should NOT have been cleaned up! -\parsertest{mu1(5,2)}{25.0}{0} - -\endgroup -% should have been clean up: -\parsertest[show error message=false,compare with TeX=false,compare with fpu=false]{mu1(-5,2)}{}{0} - - -\def\pgfmathifexpressionTest#1{% - \pgfmathifexpression{1000>999}{% - % ok - \message{PASSED for mathifexpression(1000>999) #1: = '\pgfmathresult'^^J}% - }{% - \message{FAILURE for mathifexpression(1000>999) #1: = '\pgfmathresult'^^J}% - \global\advance\numErrors by1 - }% -} - -\pgfmathifexpressionTest{basicmath} - - -\begingroup -\pgfkeys{/pgf/fpu}% -\pgfmathifexpressionTest{fpu} -\endgroup - -\begingroup -\pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}% -\pgfmathifexpressionTest{fpu output fixed} -\endgroup - -\begingroup -\pgfkeys{/pgf/fpu,/pgf/fpu/output format=sci}% -\pgfmathifexpressionTest{fpu output sci} -\endgroup - -\begingroup -\pgfkeys{/pgf/luamath/parser}% -\pgfmathifexpressionTest{luamath} -\endgroup - -\begingroup -\pgfkeys{/pgf/luamath/parser,/pgf/luamath/output format=float}% -\pgfmathifexpressionTest{luamath output float} -\endgroup - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 -% NO MORE TEST CASES HERE! - -\ifnum\numErrors>0 - \PackageError{pgf}{Has \the\numErrors\space FAILURES}{} -\else - \message{All cases PASSED^^J}% -\fi - - -\end{document} -- cgit v1.2.3