Chris Hillery has proposed merging lp:~zorba-coders/zorba/image-module-alone into lp:zorba/image-module.
Requested reviews: Zorba Coders (zorba-coders) For more details, see: https://code.launchpad.net/~zorba-coders/zorba/image-module-alone/+merge/118227 Removes Graphviz module (will be restored in a separate module branch) -- https://code.launchpad.net/~zorba-coders/zorba/image-module-alone/+merge/118227 Your team Zorba Coders is requested to review the proposed merge of lp:~zorba-coders/zorba/image-module-alone into lp:zorba/image-module.
=== modified file 'CMakeLists.txt' --- CMakeLists.txt 2011-10-09 14:49:07 +0000 +++ CMakeLists.txt 2012-08-04 00:55:23 +0000 @@ -18,11 +18,11 @@ ENABLE_TESTING () INCLUDE (CTest) -SET_CMAKE_MODULE_PATH () - FIND_PACKAGE (Zorba REQUIRED HINTS "${ZORBA_BUILD_DIR}") INCLUDE ("${Zorba_USE_FILE}") +SET_CMAKE_MODULE_PATH () + ADD_SUBDIRECTORY ("src") DONE_DECLARING_ZORBA_URIS () === removed file 'cmake_modules/FindGraphviz.cmake' --- cmake_modules/FindGraphviz.cmake 2012-07-20 20:25:12 +0000 +++ cmake_modules/FindGraphviz.cmake 1970-01-01 00:00:00 +0000 @@ -1,107 +0,0 @@ -# Copyright 2010 28msec Inc. - -# - Try to find Graphviz and the libraries it depends on -# Once done this will define -# -# GRAPHVIZ_FOUND - system has graphviz -# GRAPHVIZ_INCLUDE_DIRS - the graphviz include directory -# GRAPHVIZ_LIBRARIES - Link these to use graphviz - -IF (GRAPHVIZ_INCLUDE AND GRAPHVIZ_LIBRARY AND GVC_LIBRARY AND CDT_LIBRARY AND PATHPLAN_LIBRARY AND EXPAT_LIBRARY) - # in cache already - SET(GRAPHVIZ_FIND_QUIETLY TRUE) -ENDIF (GRAPHVIZ_INCLUDE AND GRAPHVIZ_LIBRARY AND GVC_LIBRARY AND CDT_LIBRARY AND PATHPLAN_LIBRARY AND EXPAT_LIBRARY) - -FIND_PATH( - GRAPHVIZ_INCLUDE - NAMES graph.h - PATHS ${GRAPHVIZ_INCLUDE_DIR} - PATH_SUFFIXES graphviz) - -FIND_LIBRARY( - GRAPHVIZ_LIBRARY - NAMES graph - PATHS ${GRAPHVIZ_LIBRARY_DIR}) - - -IF(GRAPHVIZ_LIBRARY) - GET_FILENAME_COMPONENT(GRAPHVIZ_LIBRARY_DIR_ ${GRAPHVIZ_LIBRARY} PATH) - - FIND_LIBRARY( - GVC_LIBRARY - NAMES gvc - PATHS ${GRAPHVIZ_LIBRARY_DIR_} ${GVC_LIBRARY_DIR}) - - FIND_LIBRARY( - CDT_LIBRARY - NAMES cdt - PATHS ${GRAPHVIZ_LIBRARY_DIR_} ${CDT_LIBRARY_DIR}) - - FIND_LIBRARY( - PATHPLAN_LIBRARY - NAMES pathplan - PATHS ${GRAPHVIZ_LIBRARY_DIR_} ${PATHPLAN_LIBRARY_DIR}) - - # for expat and libz and xdot, we have to make sure that we use the library that is used by gvc - GET_FILENAME_COMPONENT(GVC_DIR ${GVC_LIBRARY} PATH) - FIND_LIBRARY( - Z_LIBRARY - NAMES z - HINTS ${GVC_DIR}) - - FIND_LIBRARY( - EXPAT_LIBRARY - NAMES expat - HINTS ${GVC_DIR}) - - # On Mac, libgvc has a dependency to libxdot. Therefore, the library is search here to enable the install command in coreSDK/OSX.cmake - FIND_LIBRARY( - XDOT_LIBRARY - NAMES xdot - HINTS ${GVC_DIR}) - -ENDIF(GRAPHVIZ_LIBRARY) - -IF (GRAPHVIZ_INCLUDE AND GRAPHVIZ_LIBRARY AND GVC_LIBRARY AND CDT_LIBRARY AND PATHPLAN_LIBRARY) - SET(GRAPHVIZ_FOUND TRUE) - SET(GRAPHVIZ_LIBRARIES "${GRAPHVIZ_LIBRARY}" "${GVC_LIBRARY}" "${CDT_LIBRARY}" "${PATHPLAN_LIBRARY}") - - SET(GRAPHVIZ_INCLUDE_DIRS "${GRAPHVIZ_INCLUDE}") -ELSE (GRAPHVIZ_INCLUDE AND GRAPHVIZ_LIBRARY AND GVC_LIBRARY AND CDT_LIBRARY AND PATHPLAN_LIBRARY) - SET(GRAPHVIZ_FOUND FALSE) -ENDIF (GRAPHVIZ_INCLUDE AND GRAPHVIZ_LIBRARY AND GVC_LIBRARY AND CDT_LIBRARY AND PATHPLAN_LIBRARY) - -IF (GRAPHVIZ_FOUND) - IF (EXPAT_LIBRARY) - LIST(APPEND GRAPHVIZ_LIBRARIES "${EXPAT_LIBRARY}") - ELSE (EXPAT_LIBRARY) - IF(NOT WIN32) - #SET(GRAPHVIZ_FOUND FALSE) - ENDIF(NOT WIN32) - ENDIF (EXPAT_LIBRARY) - - IF (Z_LIBRARY) - LIST(APPEND GRAPHVIZ_LIBRARIES "${Z_LIBRARY}") - ELSE (Z_LIBRARY) - IF(NOT WIN32) - #SET(GRAPHVIZ_FOUND FALSE) - ENDIF(NOT WIN32) - ENDIF (Z_LIBRARY) -ENDIF (GRAPHVIZ_FOUND) - -IF(GRAPHVIZ_FOUND) - IF(NOT GRAPHVIZ_FIND_QUIETLY) - MESSAGE(STATUS "Found Graphviz: ${GRAPHVIZ_LIBRARY}") - MESSAGE(STATUS " : ${GRAPHVIZ_INCLUDE}") - MESSAGE(STATUS " : ${GVC_LIBRARY}") - MESSAGE(STATUS " : ${CDT_LIBRARY}") - MESSAGE(STATUS " : ${PATHPLAN_LIBRARY}") - MESSAGE(STATUS " : ${Z_LIBRARY}") - MESSAGE(STATUS " : ${EXPAT_LIBRARY}") - MESSAGE(STATUS " : ${XDOT_LIBRARY}") - ENDIF(NOT GRAPHVIZ_FIND_QUIETLY) -ELSE(GRAPHVIZ_FOUND) - MESSAGE(STATUS "Could not find Graphviz") -ENDIF(GRAPHVIZ_FOUND) - -MARK_AS_ADVANCED(GRAPHVIZ_INCLUDE GRAPHVIZ_LIBRARY GRAPHVIZ_INCLUDE_DIRS GRAPHVIZ_LIBRARIES GVC_LIBRARY CDT_LIBRARY PATHPLAN_LIBRARY EXPAT_LIBRARY Z_LIBRARY) === removed file 'cmake_modules/Windows/FindGraphviz.cmake' --- cmake_modules/Windows/FindGraphviz.cmake 2012-07-20 20:25:12 +0000 +++ cmake_modules/Windows/FindGraphviz.cmake 1970-01-01 00:00:00 +0000 @@ -1,41 +0,0 @@ -# Copyright 2010 The FLWOR Foundation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# - Try to find the Graphviz lib on Windows -# -# This is a proxy module that calls the FindGraphviz.cmake module. Before -# doing that, we try to guess where Graphviz might be on the user's machine. -# The user should provide ZORBA_THIRD_PARTY_REQUIREMENTS which is a path where -# the Graphviz directory can be found. The Graphviz directory must have "graphviz" -# (case insensitive) in its name. -# -# This module helps the Windows user to avoid providing the following two -# variables when building Zorba: -# -D GRAPHVIZ_INCLUDE="path_to_3rd_party_dir\*graphviz*\src" -# -D GRAPHVIZ_LIBRARY="path_to_3rd_party_dir\*graphviz*\bin\[Release]\graphviz.lib" -# -# See the FindGraphviz.cmake module shipped with Zorba for more information. - -FIND_PACKAGE_WIN32 ( - NAME "Graphviz" - FOUND_VAR "GRAPHVIZ_FOUND" - SEARCH_NAMES "graphviz" -) - -IF (GRAPHVIZ_FOUND) - - # find the needed DLL's - FIND_PACKAGE_DLLS_WIN32 (${FOUND_LOCATION} graph.dll) - -ENDIF (GRAPHVIZ_FOUND) === modified file 'src/com/zorba-xquery/www/modules/image/CMakeLists.txt' --- src/com/zorba-xquery/www/modules/image/CMakeLists.txt 2012-07-20 20:25:12 +0000 +++ src/com/zorba-xquery/www/modules/image/CMakeLists.txt 2012-08-04 00:55:23 +0000 @@ -86,31 +86,3 @@ ENDIF (ImageMagick_FOUND) ENDIF(ZORBA_SUPPRESS_ImageMagick) MESSAGE(STATUS "") - - -######################################################################## -# Graphviz -######################################################################## -IF(ZORBA_SUPPRESS_GRAPHVIZ) - MESSAGE(STATUS "ZORBA_SUPPRESS_Graphviz is true - not searching for Graphviz.") -ELSE (ZORBA_SUPPRESS_GRAPHVIZ) - - MESSAGE (STATUS "Looking for Graphviz") - FIND_PACKAGE(Graphviz) - - IF (GRAPHVIZ_FOUND) - MESSAGE(STATUS "Found Graphviz library -- "${GRAPHVIZ_LIBRARIES}) - - INCLUDE_DIRECTORIES(${GRAPHVIZ_INCLUDE_DIRS}) - INCLUDE_DIRECTORIES("graphviz.xq.src") - DECLARE_ZORBA_MODULE (VERSION 1.0 FILE "graphviz.xq" - URI "http://www.zorba-xquery.com/modules/image/graphviz" - LINK_LIBRARIES "${GRAPHVIZ_LIBRARIES}") - - ADD_TEST_DIRECTORY("${PROJECT_SOURCE_DIR}/test_graphviz") - - ELSE (GRAPHVIZ_FOUND) - MESSAGE(STATUS "Graphviz library not found.") - ENDIF (GRAPHVIZ_FOUND) -ENDIF (ZORBA_SUPPRESS_GRAPHVIZ) -MESSAGE(STATUS "") === removed directory 'src/com/zorba-xquery/www/modules/image/graphviz.xq.src' === removed file 'src/com/zorba-xquery/www/modules/image/graphviz.xq.src/graphviz.cpp' --- src/com/zorba-xquery/www/modules/image/graphviz.xq.src/graphviz.cpp 2012-07-20 20:25:12 +0000 +++ src/com/zorba-xquery/www/modules/image/graphviz.xq.src/graphviz.cpp 1970-01-01 00:00:00 +0000 @@ -1,615 +0,0 @@ -/* - * Copyright 2006-2008 The FLWOR Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "graphviz.h" - -#include <cassert> -#include <fstream> -#include <sstream> -#ifdef WIN32 -# include <io.h> -#endif - -#include <stdio.h> -#ifdef WIN32 - #include <direct.h> - #define GetCurrentDir _getcwd -#else - #include <unistd.h> - #define GetCurrentDir getcwd -#endif - -#include <types.h> -#include <graph.h> -#include <gvc.h> - -#include <zorba/diagnostic_list.h> -#include <zorba/user_exception.h> -#include <zorba/empty_sequence.h> -#include <zorba/singleton_item_sequence.h> - -namespace zorba -{ - namespace graphvizmodule - { - -/****************************************************************************** - *****************************************************************************/ -String -GraphvizFunction::getURI() const -{ - return theModule->getURI(); -} - -/****************************************************************************** - *****************************************************************************/ -std::string -GraphvizFunction::getGraphvizTmpFileName(zorba::ItemFactory* aFactory) { - char lTmpDir[FILENAME_MAX]; - - if (!GetCurrentDir(lTmpDir, sizeof(lTmpDir))) - { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "Test"); - } - zorba::String test(lTmpDir); - std::ostringstream lTmpFileNameTemplate; - lTmpFileNameTemplate << test << "/zorba.XXXXXX"; - - char* lTemporaryString = (char*) malloc(lTmpFileNameTemplate.str().size()+1); - strcpy(lTemporaryString, lTmpFileNameTemplate.str().c_str()); - std::string lRes = mktemp(lTemporaryString); // the replaced string is copied by assigning it to the string - free(lTemporaryString); - return lRes; -} - -/****************************************************************************** - *****************************************************************************/ -bool -GraphvizFunction::getAttribute(zorba::ItemFactory* aFactory, - const char* attrname, - const Item& elem, - Item& attr) -{ - Item lIdQName = aFactory->createQName("", "", attrname); - - Iterator_t lAttributes = elem.getAttributes(); - lAttributes->open(); - while (lAttributes->next(attr)) { - Item lNodeName; - attr.getNodeName(lNodeName); - if (lNodeName.getLocalName() == lIdQName.getLocalName()) { - return true; - } - } - attr = NULL; - return false; -} - -/****************************************************************************** - *****************************************************************************/ -void -GraphvizFunction::printTypeAndAttr( - ItemFactory* aFactory, - const Item& in, - std::fstream& os) -{ - Item lItem; - Item lTypeQName = aFactory->createQName("", "", "type"); - Item lAttrQName = aFactory->createQName("", "", "attr"); - - Iterator_t lChildren = in.getChildren(); - - lChildren->open(); - while (lChildren->next(lItem)) { - - // needed? - if (!lItem.isNode()) - continue; - - Item lNodeName; - lItem.getNodeName(lNodeName); - - if (lNodeName.getLocalName() != lAttrQName.getLocalName()) { - Item lNameAttr; - if (!getAttribute(aFactory, "name", lItem, lNameAttr)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: attr node does not have a name attribute"); - } - - os << " \"" << lNameAttr.getStringValue() << "\"=\""; - - // get the values of all bool, string, float, and int elements - Iterator_t lAttrChildren = lItem.getChildren(); - Item lChild; - lAttrChildren->open(); - while (lAttrChildren->next(lChild)) { - if (!lChild.isNode()) - continue; - - Item lNodeName; - lChild.getNodeName(lNodeName); - String lChildName = lNodeName.getLocalName(); - if ( (lChildName == "bool") || (lChildName == "string") - || (lChildName == "float") || (lChildName == "int")) { - os << lChild.getStringValue(); - } - } - - os << "\"" << std::endl; - - } else if (lNodeName.getStringValue() == lTypeQName.getStringValue()) { - Item lHRefAttr; - if (!getAttribute(aFactory, "href", lItem, lHRefAttr)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: type node does not have a href attribute"); - } - - os << " _gxl_type=\"" << lHRefAttr.getStringValue() << "\"" << std::endl; - } - } -} - -/****************************************************************************** - *****************************************************************************/ -void -GraphvizFunction::visitNode( - ItemFactory* aFactory, - const Item& in, std::fstream& os) -{ - Item lItem; - if (!getAttribute(aFactory, "id", in, lItem)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: node does not have an id attribute"); - } - - // start node with id attribute as name - os << " \"" << lItem.getStringValue() << "\" [ " << std::endl; - - printTypeAndAttr(aFactory, in, os); - - // end of node - os << " ]" << std::endl; - -} /* GraphvizFunction::visitNode */ - -/****************************************************************************** - *****************************************************************************/ -void -GraphvizFunction::visitEdge( - ItemFactory* aFactory, - const Item& in, std::fstream& os) -{ - Item lIdAttr; - Item lFromAttr; - Item lToAttr; - - if (!getAttribute(aFactory, "id", in, lIdAttr)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: edge does not have an 'id' attribute"); - } - if (!getAttribute(aFactory, "to", in, lToAttr)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: edge does not have a 'to' attribute"); - } - if (!getAttribute(aFactory, "from", in, lFromAttr)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: edge does not have a 'from' attribute"); - } - - os << " \"" << lFromAttr.getStringValue() << "\" -> \"" << lToAttr.getStringValue() << "\" [ " << std::endl - << " _gxl_id=\"" << lIdAttr.getStringValue() << "\"" << std::endl; - - printTypeAndAttr(aFactory, in, os); - - os << " ]" << std::endl; -} /* GraphvizFunction::visitEdge */ - -/****************************************************************************** - *****************************************************************************/ -void -GraphvizFunction::printGraph( - ItemFactory* aFactory, - const Item& in, std::fstream& os) -{ - // create helper qnames for comparison - Item lNodeQName = aFactory->createQName("", "", "node"); - Item lEdgeQName = aFactory->createQName("", "", "edge"); - Item lRelQName = aFactory->createQName("", "", "rel"); - - // print the graph with all its children - Item lGraphId; - if (!getAttribute(aFactory, "id", in, lGraphId)) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: edge does not have an 'id' attribute"); - } - - os << "digraph \"" << lGraphId.getStringValue() << "\" {" << std::endl; - - // visit nodes and edges (TODO add rel elements) - Iterator_t lChildren = in.getChildren(); - lChildren->open(); - Item item; - while (lChildren->next(item)) { - Item lNodeName; - item.getNodeName(lNodeName); - if (lNodeName.getLocalName() == lNodeQName.getLocalName()) { - visitNode(aFactory, item, os); - } else if (lNodeName.getLocalName() == lEdgeQName.getLocalName()) { - visitEdge(aFactory, item, os); - } - } - - os << "}" << std::endl; -} /* GraphvizFunction::printGraph */ - -/****************************************************************************** - *****************************************************************************/ -void -GraphvizFunction::gxl2dot( - ItemFactory* aFactory, - const Item& in, std::fstream& os) -{ - Item lGXLQName = aFactory->createQName("", "", "gxl"); - Item lGraphQName = aFactory->createQName("", "", "graph"); - - if (!in.isNode()) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: item is not a node"); - } - - Item lNodeName; - in.getNodeName(lNodeName); - if (lNodeName.getLocalName() != lGXLQName.getLocalName()) { - Item lNodeName; - in.getNodeName(lNodeName); - - std::ostringstream lErrorMsg; - lErrorMsg << "GXL parse error: only element with name " - << lGXLQName.getStringValue() << " allowed (got " << lNodeName.getStringValue() - << ")."; - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", lErrorMsg.str()); - } - - Iterator_t lGraphs = in.getChildren(); - lGraphs->open(); - - Item lGraph; - while(lGraphs->next(lGraph)) { - if (!lGraph.isNode()) { - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", "GXL parse error: item is not a node"); - } - - lGraph.getNodeName(lNodeName); - if (lNodeName.getLocalName() != lGraphQName.getLocalName()) { - std::ostringstream lErrorMsg; - Item lNodeName; - lGraph.getNodeName(lNodeName); - - lErrorMsg << "GXL parse error: only elements with name " - << lGraphQName.getStringValue() << " allowed (got " - << lNodeName.getLocalName() << ")."; - GraphvizFunction::throwErrorWithQName(aFactory, "IM003", lErrorMsg.str()); - } - - printGraph(aFactory, lGraph, os); - - } - -} /* GraphvizFunction::gxl2dot */ - -/****************************************************************************** - *****************************************************************************/ -void -GraphvizFunction::throwErrorWithQName (ItemFactory* aFactory, - const String& aLocalName, - const String& aMessage) { - String lNamespace = "http://www.zorba-xquery.com/modules/image/error"; - Item lQName = aFactory->createQName(lNamespace, "", aLocalName); - throw USER_EXCEPTION(lQName, aMessage); -} - -/****************************************************************************** - *****************************************************************************/ -DotFunction::LazyDotSequence::LazyDotSequence( - const DotFunction* aFunc, - ItemSequence* aArg) - : theFunc(aFunc), - theArg(aArg) -{ -} - -/****************************************************************************** - *****************************************************************************/ -Iterator_t DotFunction::LazyDotSequence::getIterator() -{ - return new DotFunction::LazyDotSequence::InternalIterator(this); -} - -DotFunction::LazyDotSequence::InternalIterator::InternalIterator(LazyDotSequence *item_sequence) : - theItemSequence(item_sequence), is_open(false) -{ - arg_iter = item_sequence->theArg->getIterator(); -} - -void DotFunction::LazyDotSequence::InternalIterator::open() -{ - is_open = true; - arg_iter->open(); -} - -void DotFunction::LazyDotSequence::InternalIterator::close() -{ - is_open = false; - arg_iter->close(); -} - -bool DotFunction::LazyDotSequence::InternalIterator::isOpen() const -{ - return is_open; -} - -bool -DotFunction::LazyDotSequence::InternalIterator::next(Item& aItem) -{ - if(!is_open) - { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "DotFunction::LazyDotSequence Iterator consumed without open"); - } - Item lItem; - Agraph_t *lGraph = 0; - String lGraphInput; - GVC_t *lGvc = 0; - std::ifstream lSVGFile; - - if (!arg_iter->next(lItem)) // exhausted - return false; - - lGvc = gvContext(); - - try { - lGraphInput = lItem.getStringValue(); - - lGraph = agmemread(const_cast<char*>(lGraphInput.c_str())); - if (!lGraph) { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "could not read input"); - } - - if ( gvLayout(lGvc, lGraph, const_cast<char*>("dot")) != 0 ) { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "could not generate layout"); - } - - std::string lTmpFile = theItemSequence->theFunc->getGraphvizTmpFileName(theItemSequence->theFunc->theModule->getItemFactory()); - - if ( gvRenderFilename(lGvc, lGraph, const_cast<char*>("svg"), - const_cast<char*>(lTmpFile.c_str())) != 0 ) { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "could not render graph"); - } - - lSVGFile.open(lTmpFile.c_str()); - if (lSVGFile.bad()) { - std::ostringstream lErrorMsg; - lErrorMsg << "could not read from file " - << lTmpFile.c_str(); - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", lErrorMsg.str()); - } - - aItem = Zorba::getInstance(0)->getXmlDataManager()->parseXML(lSVGFile); - - gvFreeLayout(lGvc, lGraph); - agclose(lGraph); - gvFreeContext(lGvc); - - remove(lTmpFile.c_str()); - } catch (...) { - aItem = NULL; - if (lGraph) { - gvFreeLayout(lGvc, lGraph); - agclose(lGraph); - } - gvFreeContext(lGvc); - throw; - } - - return true; - -} /* DotFunction::LazyDotSequence::next */ - -/****************************************************************************** - *****************************************************************************/ -Iterator_t GxlFunction::LazyGxlSequence::getIterator() -{ - return new GxlFunction::LazyGxlSequence::InternalIterator(this); -} - -GxlFunction::LazyGxlSequence::InternalIterator::InternalIterator(LazyGxlSequence *item_sequence) : - theItemSequence(item_sequence), is_open(false) -{ - arg_iter = item_sequence->theArg->getIterator(); -} - -void GxlFunction::LazyGxlSequence::InternalIterator::open() -{ - is_open = true; - arg_iter->open(); -} - -void GxlFunction::LazyGxlSequence::InternalIterator::close() -{ - is_open = false; - arg_iter->close(); -} - -bool GxlFunction::LazyGxlSequence::InternalIterator::isOpen() const -{ - return is_open; -} - -bool -GxlFunction::LazyGxlSequence::InternalIterator::next(Item& aItem) -{ - if(!is_open) - { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "GxlFunction::LazyGxlSequence Iterator consumed without open"); - } - Item lItem; - Agraph_t *lGraph = 0; - GVC_t *lGvc = 0; - std::fstream lSVGFile; - FILE *lFile = 0; - - if (!arg_iter->next(lItem)) // exhausted - return false; - - lGvc = gvContext(); - - try { - - std::string lTmpFile = theItemSequence->theFunc->getGraphvizTmpFileName(theItemSequence->theFunc->theModule->getItemFactory()); - lSVGFile.open(lTmpFile.c_str(), - std::fstream::in | std::fstream::out | std::fstream::trunc); - - gxl2dot(theItemSequence->theFunc->theModule->getItemFactory(), lItem, lSVGFile); - lSVGFile.close(); - - lFile = fopen(lTmpFile.c_str(), "r"); - if (!lFile) { - std::ostringstream lErrorMsg; - lErrorMsg << "could not read from file " << lTmpFile.c_str(); - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", lErrorMsg.str()); - } - - lGraph = agread(lFile); - fclose(lFile); - - if (!lGraph) { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "could not read input"); - } - - int blub = gvLayout(lGvc, lGraph, const_cast<char*>("dot")); - if ( blub != 0 ) { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "could not generate layout"); - } - - if ( gvRenderFilename(lGvc, lGraph, const_cast<char*>("svg"), - const_cast<char*>(lTmpFile.c_str())) != 0 ) { - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", "could not render graph"); - } - - lSVGFile.open(lTmpFile.c_str(), std::ifstream::in); - if (lSVGFile.bad()) { - std::ostringstream lErrorMsg; - lErrorMsg << "could not read from file " << lTmpFile.c_str(); - GraphvizFunction::throwErrorWithQName(theItemSequence->theFunc->theModule->getItemFactory(), "IM003", lErrorMsg.str()); - } - - aItem = Zorba::getInstance(0)->getXmlDataManager()->parseXML(lSVGFile); - - gvFreeLayout(lGvc, lGraph); - agclose(lGraph); - gvFreeContext(lGvc); - - remove(lTmpFile.c_str()); - } catch (...) { - if (lGraph) { - gvFreeLayout(lGvc, lGraph); - agclose(lGraph); - } - gvFreeContext(lGvc); - throw; - } - - return true; - -} /* GxlFunction::LazyGxlSequence::next */ - -/****************************************************************************** - *****************************************************************************/ -GxlFunction::LazyGxlSequence::LazyGxlSequence( - const GxlFunction* aFunc, - ItemSequence* aArg) - : theFunc(aFunc), - theArg(aArg) -{ -} - -/****************************************************************************** - *****************************************************************************/ -zorba::ItemSequence_t -DotFunction::evaluate( - const Arguments_t& aArgs, - const zorba::StaticContext* aSctx, - const zorba::DynamicContext *aDctx) const -{ - return ItemSequence_t(new LazyDotSequence(this, aArgs[0])); -} /* DotFunction::evaluate */ - -/****************************************************************************** - *****************************************************************************/ -zorba::ItemSequence_t -GxlFunction::evaluate( - const Arguments_t& aArgs, - const zorba::StaticContext* aSctx, - const zorba::DynamicContext *aDctx) const -{ - return ItemSequence_t(new LazyGxlSequence(this, aArgs[0])); -} /* GxlFunction::evaluate */ - -/****************************************************************************** - *****************************************************************************/ -ItemFactory* GraphvizModule::theFactory = 0; - -const char* GraphvizModule::theModule = "http://www.zorba-xquery.com/modules/image/graphviz"; - -GraphvizModule::~GraphvizModule() -{ - for (FuncMap_t::const_iterator lIter = theFunctions.begin(); - lIter != theFunctions.end(); ++lIter) { - delete lIter->second; - } - theFunctions.clear(); -} - -ExternalFunction* -GraphvizModule::getExternalFunction(const String& aLocalname) -{ - ExternalFunction*& lFunc = theFunctions[aLocalname]; - if (!lFunc) { - if (aLocalname == "dot") - { - lFunc = new DotFunction(this); - } else if (aLocalname == "gxl") - { - lFunc = new GxlFunction(this); - } - } - return lFunc; -} - -void -GraphvizModule::destroy() -{ - if (!dynamic_cast<GraphvizModule*>(this)) { - return; - } - delete this; -} - - } /* namespace zorba */ -} /* namespace graphvizmodule */ - -/****************************************************************************** - *****************************************************************************/ -#ifdef WIN32 -# define DLL_EXPORT __declspec(dllexport) -#else -# define DLL_EXPORT __attribute__ ((visibility("default"))) -#endif - -extern "C" DLL_EXPORT zorba::ExternalModule* createModule() { - return new zorba::graphvizmodule::GraphvizModule(); -} === removed file 'src/com/zorba-xquery/www/modules/image/graphviz.xq.src/graphviz.h' --- src/com/zorba-xquery/www/modules/image/graphviz.xq.src/graphviz.h 2012-07-20 20:25:12 +0000 +++ src/com/zorba-xquery/www/modules/image/graphviz.xq.src/graphviz.h 1970-01-01 00:00:00 +0000 @@ -1,234 +0,0 @@ -/* - * Copyright 2006-2008 The FLWOR Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ZORBA_GRAPHVIZMODULE_GRAPHVIZ_H -#define ZORBA_GRAPHVIZMODULE_GRAPHVIZ_H - -#include <map> - -#include <zorba/iterator.h> -#include <zorba/zorba.h> -#include <zorba/function.h> -#include <zorba/external_module.h> - -namespace zorba -{ -namespace graphvizmodule -{ - -class GraphvizModule; - -/****************************************************************************** - *****************************************************************************/ -class GraphvizFunction : public ContextualExternalFunction -{ - protected: - const GraphvizModule* theModule; - - GraphvizFunction(const GraphvizModule* aModule) - : theModule(aModule) {} - - static std::string - getGraphvizTmpFileName(zorba::ItemFactory* aFactory); - - static bool - getAttribute(zorba::ItemFactory* aFactory, - const char* attrname, - const zorba::Item& elem, - zorba::Item& attr); - - static void - printTypeAndAttr(zorba::ItemFactory* aFactory, - const zorba::Item& in, - std::fstream& os); - - static void - visitNode(zorba::ItemFactory* aFactory, - const zorba::Item& in, std::fstream& os); - - static void - visitEdge(zorba::ItemFactory* aFactory, - const zorba::Item& in, std::fstream& os); - - static void - printGraph(zorba::ItemFactory* aFactory, - const zorba::Item& in, std::fstream& os); - - static void - gxl2dot(zorba::ItemFactory* aFactory, - const zorba::Item& in, std::fstream& os); - - static void - throwErrorWithQName (zorba::ItemFactory* aFactory, - const String& aLocalName, - const String& aMessage); - - public: - - virtual String - getURI() const; -}; - -/****************************************************************************** - *****************************************************************************/ -class DotFunction : public GraphvizFunction -{ -public: - DotFunction(const GraphvizModule* aModule) - : GraphvizFunction(aModule) {} - - virtual ~DotFunction() {} - - virtual String - getLocalName() const { return "dot"; } - - virtual zorba::ItemSequence_t - evaluate(const Arguments_t&, - const zorba::StaticContext*, - const zorba::DynamicContext*) const; - -protected: - class LazyDotSequence : public zorba::ItemSequence - { - class InternalIterator : public Iterator - { - private: - LazyDotSequence *theItemSequence; - Iterator_t arg_iter; - bool is_open; - public: - InternalIterator(LazyDotSequence *item_sequence); - - virtual void open(); - virtual bool next(Item& aItem); - virtual void close(); - virtual bool isOpen() const; - }; - public: - LazyDotSequence(const DotFunction*, - ItemSequence* aArg); - - virtual Iterator_t getIterator(); - - protected: - const DotFunction* theFunc; - ItemSequence* theArg; - }; -}; - -/****************************************************************************** - *****************************************************************************/ -class GxlFunction : public GraphvizFunction -{ -public: - GxlFunction(const GraphvizModule* aModule) - : GraphvizFunction(aModule) {} - - virtual ~GxlFunction() {} - - virtual String - getLocalName() const { return "gxl"; } - - virtual zorba::ItemSequence_t - evaluate(const Arguments_t&, - const zorba::StaticContext*, - const zorba::DynamicContext*) const; - -protected: - class LazyGxlSequence : public zorba::ItemSequence - { - class InternalIterator : public Iterator - { - private: - LazyGxlSequence *theItemSequence; - Iterator_t arg_iter; - bool is_open; - public: - InternalIterator(LazyGxlSequence *item_sequence); - - virtual void open(); - virtual bool next(Item& aItem); - virtual void close(); - virtual bool isOpen() const; - }; - public: - LazyGxlSequence(const GxlFunction*, - ItemSequence* aArg); - - Iterator_t getIterator(); - - protected: - const GxlFunction* theFunc; - ItemSequence* theArg; - }; -}; - -/****************************************************************************** - ******************************************************************************/ -class GraphvizModule : public ExternalModule -{ -private: - static ItemFactory* theFactory; - -protected: - class ltstr - { - public: - - - bool operator()(const String& s1, const String& s2) const - { - return s1.compare(s2) < 0; - } - }; - - typedef std::map<String, ExternalFunction*, ltstr> FuncMap_t; - - FuncMap_t theFunctions; - -public: - - static const char* theModule; - - virtual ~GraphvizModule(); - - virtual String - getURI() const - { - return theModule; - } - - virtual ExternalFunction* - getExternalFunction(const String& aLocalname); - - virtual void - destroy(); - - static ItemFactory* - getItemFactory() - { - if(!theFactory) - { - theFactory = Zorba::getInstance(0)->getItemFactory(); - } - return theFactory; - } -}; - -} /* namespace zorba */ -} /* namespace graphvizmodule */ - -#endif === removed directory 'test_graphviz' === removed directory 'test_graphviz/ExpQueryResults' === removed file 'test_graphviz/ExpQueryResults/dot.xml.res' --- test_graphviz/ExpQueryResults/dot.xml.res 2012-07-20 20:25:12 +0000 +++ test_graphviz/ExpQueryResults/dot.xml.res 1970-01-01 00:00:00 +0000 @@ -1,1 +0,0 @@ -true \ No newline at end of file === removed directory 'test_graphviz/Queries' === removed file 'test_graphviz/Queries/dot.xq' --- test_graphviz/Queries/dot.xq 2012-07-20 20:25:12 +0000 +++ test_graphviz/Queries/dot.xq 1970-01-01 00:00:00 +0000 @@ -1,3 +0,0 @@ -import module namespace dot = "http://www.zorba-xquery.com/modules/image/graphviz"; - -fn:exists(dot:dot("digraph mygraph { p -> q }", ())) \ No newline at end of file
-- Mailing list: https://launchpad.net/~zorba-coders Post to : zorba-coders@lists.launchpad.net Unsubscribe : https://launchpad.net/~zorba-coders More help : https://help.launchpad.net/ListHelp