浏览代码

Merge branch 'candidate-6.4.0'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 8 年之前
父节点
当前提交
bec7e37d36
共有 100 个文件被更改,包括 3129 次插入937 次删除
  1. 0 2
      .gitattributes
  2. 3 0
      .gitmodules
  3. 1 0
      CMakeLists.txt
  4. 0 59
      cmake_modules/FindTBB.cmake
  5. 0 55
      cmake_modules/FindTBBMALLOC.cmake
  6. 3 15
      cmake_modules/commonSetup.cmake
  7. 31 17
      cmake_modules/docMacros.cmake
  8. 5 4
      common/thorhelper/CMakeLists.txt
  9. 8 6
      common/thorhelper/thorstats.cpp
  10. 3 2
      common/thorhelper/thorstats.hpp
  11. 14 1
      dali/ft/daftformat.cpp
  12. 29 10
      deployment/configgen/main.cpp
  13. 9 0
      docs/CMakeLists.txt
  14. 11 0
      docs/DynamicESDL/CMakeLists.txt
  15. 4 4
      docs/DynamicESDL/DynamicESDL_Includer.xml
  16. 11 0
      docs/ECLLanguageReference/CMakeLists.txt
  17. 1 1
      docs/ECLLanguageReference/ECLR-includer.xml
  18. 38 14
      docs/ECLLanguageReference/ECLR_mods/BltInFunc-GROUP.xml
  19. 19 10
      docs/ECLLanguageReference/ECLR_mods/Recrd-ScopeNLogicalFilenames.xml
  20. 14 3
      docs/ECLLanguageReference/ECLR_mods/WkFlo-INDEPENDENT.xml
  21. 12 0
      docs/ECLPlayground/CMakeLists.txt
  22. 4 4
      docs/ECLPlayground/ECLPlayground-includer.xml
  23. 11 0
      docs/ECLPluginForEclipse/CMakeLists.txt
  24. 3 3
      docs/ECLPluginForEclipse/ECL_Plugin_for_Eclipse.xml
  25. 10 0
      docs/ECLProgrammersGuide/CMakeLists.txt
  26. 3 3
      docs/ECLProgrammersGuide/PrGd-Includer.xml
  27. 7 1
      docs/ECLReference/ECLReference.xml
  28. 13 1
      docs/ECLScheduler/CMakeLists.txt
  29. 12 12
      docs/ECLScheduler/ECLScheduler.xml
  30. 13 0
      docs/ECLStandardLibraryReference/CMakeLists.txt
  31. 72 0
      docs/ECLStandardLibraryReference/SLR-Mods/FindWord.xml
  32. 6 3
      docs/ECLStandardLibraryReference/SLR-includer.xml
  33. 11 0
      docs/ECLWatch/CMakeLists.txt
  34. 25 25
      docs/ECLWatch/TheECLWatchMan.xml
  35. 11 8
      docs/EclipseHelp/CMakeLists.txt
  36. 12 0
      docs/HPCCCertify/CMakeLists.txt
  37. 6 6
      docs/HPCCCertify/certify.xml
  38. 23 0
      docs/HPCCClientTools/CMakeLists.txt
  39. 1 1
      docs/HPCCClientTools/CT_Mods/CT_ECL_IDE.xml
  40. 9 9
      docs/HPCCClientTools/ClientTools.xml
  41. 10 10
      docs/HPCCClientTools/TheECLIDEandHPCCClientTools.xml
  42. 11 0
      docs/HPCCDataHandling/CMakeLists.txt
  43. 7 7
      docs/HPCCDataHandling/DataHandling.xml
  44. 10 0
      docs/HPCCDataTutorial/CMakeLists.txt
  45. 3 3
      docs/HPCCDataTutorial/DataTutorial.xml
  46. 10 0
      docs/HPCCMonitoring/CMakeLists.txt
  47. 4 4
      docs/HPCCMonitoring/HPCCMonitoringAndReporting.xml
  48. 22 0
      docs/HPCCSystemAdmin/CMakeLists.txt
  49. 40 18
      docs/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml
  50. 3 3
      docs/HPCCSystemAdmin/SecMgrInc.xml
  51. 26 0
      docs/HTMLHelp/CMakeLists.txt
  52. 11 0
      docs/Installing_and_RunningTheHPCCPlatform/CMakeLists.txt
  53. 31 5
      docs/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml
  54. 13 1
      docs/InstantCloud/CMakeLists.txt
  55. 3 3
      docs/InstantCloud/InstantCloud.xml
  56. 32 0
      docs/PortalHTML/CMakeLists.txt
  57. 11 0
      docs/RoxieReference/CMakeLists.txt
  58. 6 6
      docs/RoxieReference/RoxieReference.xml
  59. 11 0
      docs/RunningHPCCinaVirtualMachine/CMakeLists.txt
  60. 3 3
      docs/RunningHPCCinaVirtualMachine/RunningHPCCinaVirtualMachine.xml
  61. 12 0
      docs/UsingConfigManager/CMakeLists.txt
  62. 36 36
      docs/UsingConfigManager/UsingConfigManager.xml
  63. 0 505
      docs/Visualizing/Visualizing.xml
  64. 19 0
      docs/VisualizingECL/CMakeLists.txt
  65. 78 0
      docs/VisualizingECL/Visualizing_Includer.xml
  66. 111 0
      docs/VisualizingECL/VizMods/2d.xml
  67. 204 0
      docs/VisualizingECL/VizMods/Any.xml
  68. 303 0
      docs/VisualizingECL/VizMods/Choropleth.xml
  69. 89 0
      docs/VisualizingECL/VizMods/Methods.xml
  70. 690 0
      docs/VisualizingECL/VizMods/MultiD.xml
  71. 409 0
      docs/VisualizingECL/VizMods/TwoD.xml
  72. 163 0
      docs/VisualizingECL/VizMods/VizIntro.xml
  73. 二进制
      docs/images/viz07.jpg
  74. 二进制
      docs/images/viz08.jpg
  75. 二进制
      docs/images/viz09.jpg
  76. 二进制
      docs/images/viz10.jpg
  77. 25 2
      ecl/hql/hqlexpr.cpp
  78. 36 8
      ecl/hql/hqlfold.cpp
  79. 8 0
      ecl/hql/hqlgram.y
  80. 34 0
      ecl/hql/hqlthql.cpp
  81. 7 0
      ecl/hql/hqltrans.cpp
  82. 1 0
      ecl/hql/hqltrans.ipp
  83. 10 7
      ecl/hqlcpp/hqlcpp.cpp
  84. 2 0
      ecl/hqlcpp/hqlcpp.ipp
  85. 43 0
      ecl/hqlcpp/hqlhtcpp.cpp
  86. 3 0
      ecl/hqlcpp/hqlhtcpp.ipp
  87. 1 0
      ecl/hqlcpp/hqlres.cpp
  88. 32 0
      ecl/hqlcpp/hqlstmt.cpp
  89. 1 0
      ecl/hqlcpp/hqlstmt.hpp
  90. 18 20
      ecl/hqlcpp/hqlttcpp.cpp
  91. 3 3
      ecl/hqlcpp/hqlttcpp.ipp
  92. 5 3
      ecl/regress/export3.ecl
  93. 18 2
      esp/platform/espcfg.cpp
  94. 3 0
      esp/src/eclwatch/ESPWorkunit.js
  95. 14 2
      esp/src/eclwatch/LZBrowseWidget.js
  96. 10 1
      esp/src/eclwatch/UserQueryWidget.js
  97. 1 1
      esp/src/eclwatch/WUDetailsWidget.js
  98. 1 1
      esp/src/eclwatch/templates/LZBrowseWidget.html
  99. 4 4
      esp/src/eclwatch/templates/UserQueryWidget.html
  100. 0 0
      initfiles/.gitattributes

+ 0 - 2
.gitattributes

@@ -1,6 +1,5 @@
 *               text=auto
 *.sh            eol=lf
-initfiles/*     eol=lf
 *.bat           eol=crlf
 *.jpg           -text
 *.gif           -text
@@ -11,4 +10,3 @@ initfiles/*     eol=lf
 *.psd           -text
 *.doc           -text
 *.mk            -text
-rtl/ecltpl/*    eol=lf

+ 3 - 0
.gitmodules

@@ -49,3 +49,6 @@
 [submodule "plugins/redis/hiredis"]
 	path = plugins/redis/hiredis
 	url = https://github.com/hpcc-systems/hiredis.git
+[submodule "system/tbb_sm/tbb"]
+    path = system/tbb_sm/tbb
+    url = https://github.com/hpcc-systems/tbb.git

+ 1 - 0
CMakeLists.txt

@@ -142,6 +142,7 @@ endif()
 include(${HPCC_SOURCE_DIR}/cmake_modules/commonSetup.cmake)
 
 if ( PLUGIN )
+    HPCC_ADD_SUBDIRECTORY (system/tbb_sm)
     HPCC_ADD_SUBDIRECTORY (roxie/roxiemem)
     HPCC_ADD_SUBDIRECTORY (rtl/nbcd)
     HPCC_ADD_SUBDIRECTORY (rtl/eclrtl)

+ 0 - 59
cmake_modules/FindTBB.cmake

@@ -1,59 +0,0 @@
-################################################################################
-#    HPCC SYSTEMS software Copyright (C) 2015 HPCC Systems.
-#
-#    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 TBB library
-# Once done this will define
-#
-#  TBB_FOUND - system has the TBB library
-#  TBB_INCLUDE_DIR - the TBB include directory
-#  TBB_LIBRARIES - The libraries needed to use TBB
-
-IF (NOT TBB_FOUND)
-  SET (tbb_lib "tbb")
-
-  IF (NOT "${EXTERNALS_DIRECTORY}" STREQUAL "")
-    IF (WIN32)
-      IF (${ARCH64BIT} EQUAL 1)
-        SET (osdir "Win64")
-      ELSE()
-        SET (osdir "Win32")
-      ENDIF()
-      SET (tbbver "1.2.8")
-    ELSE()
-      SET (osdir "unknown")
-      SET (tbbver "unknown")
-    ENDIF()
-    IF (NOT ("${osdir}" STREQUAL "unknown"))
-      FIND_PATH (TBB_INCLUDE_DIR NAMES tbb/tbb.h PATHS "${EXTERNALS_DIRECTORY}/tbb/${tbbver}/include" NO_DEFAULT_PATH)
-      FIND_LIBRARY (TBB_LIBRARIES NAMES ${tbb_lib} PATHS "${EXTERNALS_DIRECTORY}/tbb/${tbbver}/lib/${osdir}" NO_DEFAULT_PATH)
-    ENDIF()
-  ENDIF()
-
-  if (USE_NATIVE_LIBRARIES)
-    # if we didn't find in externals, look in system include path
-    FIND_PATH (TBB_INCLUDE_DIR NAMES tbb/tbb.h)
-    FIND_LIBRARY (TBB_LIBRARIES NAMES ${tbb_lib})
-  endif()
-
-  include(FindPackageHandleStandardArgs)
-  find_package_handle_standard_args(TBB DEFAULT_MSG
-    TBB_LIBRARIES
-    TBB_INCLUDE_DIR
-  )
-
-  MARK_AS_ADVANCED(TBB_INCLUDE_DIR TBB_LIBRARIES)
-ENDIF()

+ 0 - 55
cmake_modules/FindTBBMALLOC.cmake

@@ -1,55 +0,0 @@
-################################################################################
-#    HPCC SYSTEMS software Copyright (C) 2015 HPCC Systems.
-#
-#    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 TBB malloc proxy library
-# Once done this will define
-#
-#  TBBMALLOC_FOUND - system has the TBBMALLOC library
-#  TBBMALLOC_LIBRARIES - The libraries needed to use TBBMALLOC
-
-IF (NOT TBBMALLOC_FOUND)
-  SET (tbbmalloc_lib "tbbmalloc_proxy")
-
-  IF (NOT "${EXTERNALS_DIRECTORY}" STREQUAL "")
-    IF (WIN32)
-      IF (${ARCH64BIT} EQUAL 1)
-        SET (osdir "Win64")
-      ELSE()
-        SET (osdir "Win32")
-      ENDIF()
-      SET (tbbver "1.2.8")
-    ELSE()
-      SET (osdir "unknown")
-      SET (tbbver "unknown")
-    ENDIF()
-    IF (NOT ("${osdir}" STREQUAL "unknown"))
-      FIND_LIBRARY (TBBMALLOC_LIBRARIES NAMES ${tbbmalloc_lib} PATHS "${EXTERNALS_DIRECTORY}/tbb/${tbbver}/lib/${osdir}" NO_DEFAULT_PATH)
-    ENDIF()
-  ENDIF()
-
-  if (USE_NATIVE_LIBRARIES)
-    # if we didn't find in externals, look in system include path
-    FIND_LIBRARY (TBBMALLOC_LIBRARIES NAMES ${tbbmalloc_lib})
-  endif()
-
-  include(FindPackageHandleStandardArgs)
-  find_package_handle_standard_args(TBBMALLOC DEFAULT_MSG
-    TBBMALLOC_LIBRARIES
-  )
-
-  MARK_AS_ADVANCED(TBBMALLOC_LIBRARIES)
-ENDIF()

+ 3 - 15
cmake_modules/commonSetup.cmake

@@ -311,7 +311,7 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
   if ((CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) AND (NOT ${CMAKE_CXX_COMPILER_VERSION} MATCHES "[0-9]+\\.[0-9]+\\.[0-9]+"))
       execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE CMAKE_CXX_COMPILER_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
   endif()
-  if (CMAKE_COMPILER_IS_GNUCC)
+  if (CMAKE_COMPILER_IS_GNUCC AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
     add_definitions (-fvisibility=hidden)
   endif ()
   if (CMAKE_COMPILER_IS_CLANGXX)
@@ -877,24 +877,12 @@ IF ("${COMMONSETUP_DONE}" STREQUAL "")
       endif()
 
       if(USE_TBB)
-        find_package(TBB)
-        if (TBB_FOUND)
+          message(STATUS "Enabled use of TBB")
           add_definitions (-D_USE_TBB)
-        else()
-          message(FATAL_ERROR "TBB requested but package not found")
-        endif()
-      else()
-        set(TBB_INCLUDE_DIR "")
       endif(USE_TBB)
-
       if(USE_TBBMALLOC)
-        find_package(TBBMALLOC)
-        if (TBBMALLOC_FOUND)
+          message(STATUS "Enabled use of TBBMALLOC")
           add_definitions (-D_USE_TBBMALLOC)
-        else()
-            message(WARNING "Optional TBBMALLOC requested, but missing")
-            set(USE_TBBMALLOC OFF)
-        endif()
       endif(USE_TBBMALLOC)
 
   ENDIF()

+ 31 - 17
cmake_modules/docMacros.cmake

@@ -99,33 +99,47 @@ MACRO(DOCBOOK_TO_PDF _xsl _file _name)
         ENDIF(MAKE_DOCS)
 ENDMACRO(DOCBOOK_TO_PDF targetname_suffix srcfile outfile targetdir deps_list)
 
-MACRO(DOCBOOK_TO_HTML _xsl_file _xml_file _out_dir)
+MACRO(DOCBOOK_TO_HTML _xsl_file _xml_file _out_dir _html_target _css_path _zip_target)
     IF(MAKE_DOCS)
-       set(_html_zip "doc_generate_html_zip")
-       set(_html_files "_generate_html_files")
+       if("${_html_target}" STREQUAL "")
+           set(_html_target "_generate_html_files")
+       endif()
+
+       if("${_css_path}" STREQUAL "")
+           set(_css_path "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css")
+       endif()
+       get_filename_component(css_file_name ${_css_path} NAME)
 
        STRING(REGEX REPLACE "(.+)/([^/]+)$" "\\1" _out_dir1 "${_out_dir}")
        STRING(REGEX REPLACE ".+/([^/]+)$" "\\1" _out_dir2 "${_out_dir}")
-       SET(_zip_file ${_out_dir2}-${version}-${stagever}.zip)
+
+       if(NOT "${_zip_target}" STREQUAL "")
+          SET(_zip_file ${_out_dir2}-${version}-${stagever}.zip)
+       endif()
        ADD_CUSTOM_COMMAND(
            COMMAND mkdir -p ${_out_dir}
-           COMMAND cp ${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css ${_out_dir}/
-           OUTPUT ${_out_dir}/eclipsehelp.css
+           COMMAND cp ${_css_path} ${_out_dir}/
+           OUTPUT ${_out_dir}/${css_file_name}
            )
-       ADD_CUSTOM_TARGET(${_html_files}
-           COMMAND xsltproc --nonet --xinclude ${_xsl_file} ${_xml_file}
+       ADD_CUSTOM_TARGET(${_html_target}
+           COMMAND xsltproc --nonet --xinclude --stringparam html.stylesheet ${css_file_name} --stringparam generate.toc "book toc"  --param use.id.as.filename 1 --param chapter.autolabel 0  ${_xsl_file} ${_xml_file}
            WORKING_DIRECTORY ${_out_dir}
-           DEPENDS docbook-expand ${_out_dir}/eclipsehelp.css ${HELP_DEPENDENCIES}
-           SOURCES ${_xsl_file}
+           DEPENDS docbook-expand ${_out_dir}/${css_file_name} ${HELP_DEPENDENCIES}
+           #SOURCES ${_xsl_file}
            )
        SET(HELP_DEPENDENCIES)
-       ADD_CUSTOM_COMMAND(
-           COMMAND zip -r ${_zip_file} ${_out_dir2}
-           WORKING_DIRECTORY ${_out_dir1}
-           OUTPUT ${_zip_file}
-           )
-       ADD_CUSTOM_TARGET(${_html_zip} ALL DEPENDS ${_html_files} ${_zip_file})
-       set_property(GLOBAL APPEND PROPERTY DOC_TARGETS ${_html_zip})
+
+       if(NOT "${_zip_target}" STREQUAL "")
+           ADD_CUSTOM_COMMAND(
+               COMMAND zip -r ${_zip_file} ${_out_dir2}
+               WORKING_DIRECTORY ${_out_dir1}
+               OUTPUT ${_zip_file}
+               )
+           ADD_CUSTOM_TARGET(${_zip_target} ALL DEPENDS ${_html_target} ${_zip_file})
+           set_property(GLOBAL APPEND PROPERTY DOC_TARGETS ${_zip_target})
+       else()
+           set_property(GLOBAL APPEND PROPERTY DOC_TARGETS ${_html_target})
+       endif()
     ENDIF(MAKE_DOCS)
 ENDMACRO(DOCBOOK_TO_HTML)
 

+ 5 - 4
common/thorhelper/CMakeLists.txt

@@ -93,7 +93,7 @@ include_directories (
          ./../../rtl/include 
          ./../../roxie/roxiemem
          ./../../testing/unittests
-         ${TBB_INCLUDE_DIR}
+         ./../../system/tbb_sm/tbb/include
          ./../../system/security/shared
     )
 
@@ -114,8 +114,9 @@ if (USE_NUMA)
  target_link_libraries ( thorhelper numa )
 endif ()
 
-if (${USE_TBB} )
-   target_link_libraries ( thorhelper ${TBB_LIBRARIES})
+if (USE_TBB)
+   add_dependencies ( thorhelper tbb )
+   target_link_libraries ( thorhelper libtbb )
 endif()
 
 
@@ -130,4 +131,4 @@ IF (USE_ZLIB)
         ${ZLIB_LIBRARIES}
         zcrypt
     )
-ENDIF()
+ENDIF()

+ 8 - 6
common/thorhelper/thorstats.cpp

@@ -22,10 +22,10 @@
 
 
 //Cycles are accumulated locally, time is updated once it is serialized or persisted
-const StatisticsMapping nestedSectionStatistics(StCycleLocalExecuteCycles, StTimeLocalExecute, StNumExecutions, StKindNone);
+const StatisticsMapping nestedSectionStatistics(StCycleLocalExecuteCycles, StTimeLocalExecute, StNumStarted, StNumStopped, StKindNone);
 
-ThorSectionTimer::ThorSectionTimer(const char * _name, CRuntimeStatistic & _occurences, CRuntimeStatistic & _elapsed)
-: occurences(_occurences), elapsed(_elapsed), name(_name)
+ThorSectionTimer::ThorSectionTimer(const char * _name, CRuntimeStatistic & _starts, CRuntimeStatistic & _stops, CRuntimeStatistic & _elapsed)
+: starts(_starts), stops(_stops), elapsed(_elapsed), name(_name)
 {
 }
 
@@ -33,13 +33,15 @@ ThorSectionTimer * ThorSectionTimer::createTimer(CRuntimeStatisticCollection & s
 {
     StatsScopeId scope(SSTfunction, name);
     CRuntimeStatisticCollection & nested = stats.registerNested(scope, nestedSectionStatistics);
-    CRuntimeStatistic & occurences = nested.queryStatistic(StNumExecutions);
+    CRuntimeStatistic & starts = nested.queryStatistic(StNumStarted);
+    CRuntimeStatistic & stops = nested.queryStatistic(StNumStopped);
     CRuntimeStatistic & elapsed = nested.queryStatistic(StCycleLocalExecuteCycles);
-    return new ThorSectionTimer(name, occurences, elapsed);
+    return new ThorSectionTimer(name, starts, stops, elapsed);
 }
 
 unsigned __int64 ThorSectionTimer::getStartCycles()
 {
+    starts.addAtomic(1);
     return get_cycles_now();
 }
 
@@ -47,5 +49,5 @@ void ThorSectionTimer::noteSectionTime(unsigned __int64 startCycles)
 {
     cycle_t delay = get_cycles_now() - startCycles;
     elapsed.addAtomic(delay);
-    occurences.addAtomic(1);
+    stops.addAtomic(1);
 }

+ 3 - 2
common/thorhelper/thorstats.hpp

@@ -38,10 +38,11 @@ public:
     virtual void noteSectionTime(unsigned __int64 startCycles);
 
 protected:
-    ThorSectionTimer(const char * _name, CRuntimeStatistic & _occurences, CRuntimeStatistic & _elapsed);
+    ThorSectionTimer(const char * _name, CRuntimeStatistic & _starts, CRuntimeStatistic & _stops, CRuntimeStatistic & _elapsed);
 
 private:
-    CRuntimeStatistic & occurences;
+    CRuntimeStatistic & starts;
+    CRuntimeStatistic & stops;
     CRuntimeStatistic & elapsed;
     StringAttr name;
 };

+ 14 - 1
dali/ft/daftformat.cpp

@@ -928,6 +928,20 @@ size32_t CCsvPartitioner::getSplitRecordSize(const byte * start, unsigned maxToR
         cur += matchLen;
     }
 
+    numOfProcessedBytes += maxToRead;
+
+    if (isFirstRow)
+    {
+        // It seems there is only one row/record and it is terminated
+        // by EOF instead of TERMINATOR therefore the record structure definition
+        // generation doesn't finish yet.
+        isFirstRow = false;
+
+        // Process last field
+        storeFieldName((const char*)firstGood, lastGood-firstGood);
+        recordStructure.append("END;");
+    }
+
     if (processFullBuffer && (last != start))
     {
         return last - start;
@@ -936,7 +950,6 @@ size32_t CCsvPartitioner::getSplitRecordSize(const byte * start, unsigned maxToR
     if (!ateof)
         throwError(DFTERR_EndOfRecordNotFound);
 
-    numOfProcessedBytes += (unsigned)(end - start);
 
     LOG(MCdebugProgress, unknownJob, "CSV splitRecordSize(%d) at end of file", (unsigned) (end - start));
 

+ 29 - 10
deployment/configgen/main.cpp

@@ -493,17 +493,36 @@ int processRequest(const char* in_cfgname, const char* out_dirname, const char*
     ForEach(*dropZonesInsts)
     {
       IPropertyTree* pDropZone = &dropZonesInsts->query();
-      StringBuffer computerName(pDropZone->queryProp(XML_ATTR_COMPUTER));
-      xPath.clear().appendf("Hardware/Computer[@name=\"%s\"]", computerName.str());
-      IPropertyTree* pComputer = pEnv->queryPropTree(xPath.str());
-      if (pComputer)
+      const char * dropzonePath = pDropZone->queryProp(XML_ATTR_DIRECTORY);
+        
+      Owned<IPropertyTreeIterator> serverList = pDropZone->getElements("ServerList");
+      // Use new serverlist behaviour if present
+      if (serverList->first())
       {
-        const char* netAddr = pComputer->queryProp("@netAddress");
-
-        if (listdropzones)
-          out.appendf("%s,%s\n", netAddr, pDropZone->queryProp(XML_ATTR_DIRECTORY));
-        else if (matchDeployAddress(ipAddr, netAddr))
-          out.appendf("%s\n", pDropZone->queryProp(XML_ATTR_DIRECTORY)); 
+        ForEach(*serverList)
+        {
+          IPropertyTree* pServer = &serverList->query();
+          const char* netAddr = pServer->queryProp("@server");
+          if (listdropzones)
+            out.appendf("%s,%s\n", netAddr, dropzonePath);
+          else if (matchDeployAddress(ipAddr, netAddr))
+            out.appendf("%s\n", dropzonePath); 
+        }
+      }
+      // fallback to old dropzone with defined computer
+      else
+      {
+        StringBuffer computerName(pDropZone->queryProp(XML_ATTR_COMPUTER));
+        xPath.clear().appendf("Hardware/Computer[@name=\"%s\"]", computerName.str());
+        IPropertyTree* pComputer = pEnv->queryPropTree(xPath.str());
+        if (pComputer)
+        {
+          const char * netAddr = pComputer->queryProp("@netAddress");
+          if (listdropzones)
+            out.appendf("%s,%s\n", netAddr, dropzonePath);
+          else if (matchDeployAddress(ipAddr, netAddr))
+            out.appendf("%s\n", dropzonePath);
+        }
       }
     }
 

+ 9 - 0
docs/CMakeLists.txt

@@ -31,6 +31,8 @@ set (FO_XSL ${CMAKE_CURRENT_BINARY_DIR}/BuildTools/fo.xsl)
 set (VERSION_DIR ${CMAKE_CURRENT_BINARY_DIR}/)
 set (ECLIPSE_HTML_XSL ${CMAKE_CURRENT_BINARY_DIR}/BuildTools/EclipseHelp.xsl)
 set (ECL_REFERENCE_XML ${CMAKE_CURRENT_BINARY_DIR}/ECLReference/ECLReference.xml)
+set (HTML_HELP_XSL ${CMAKE_CURRENT_BINARY_DIR}/resources/docbook-xsl/htmlhelp/htmlhelp.xsl)
+
 
 
 if ( "${HPCC_MATURITY}" STREQUAL "release" )
@@ -39,6 +41,8 @@ else()
 	set (DOC_VERSION "${DOC_VERSION}-${HPCC_MATURITY}${HPCC_SEQUENCE}")
 endif()
 
+set (PORTAL_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/PortalHTML")
+
 # Build image file list to add to source watch.
 file(GLOB_RECURSE DOC_IMAGES_LIST images/*)
 
@@ -54,6 +58,7 @@ add_subdirectory(ECLProgrammersGuide)
 add_subdirectory(ECLStandardLibraryReference)
 add_subdirectory(ECLReference)
 add_subdirectory(EclipseHelp)
+add_subdirectory(HTMLHelp)
 add_subdirectory(HPCCClientTools)
 add_subdirectory(HPCCCertify)
 add_subdirectory(HPCCDataHandling)
@@ -69,6 +74,8 @@ add_subdirectory(ECLPlayground)
 add_subdirectory(ECLPluginForEclipse)
 add_subdirectory(ECLScheduler)
 add_subdirectory(ECLWatch)
+add_subdirectory(VisualizingECL)
+
 
 # Docs automation
 if (DOCS_AUTO)
@@ -80,5 +87,7 @@ endif()
 #WIP -  Docs
 #add_subdirectory(RuningHPCCinAmazonWebServicesEC2)
 
+add_subdirectory(PortalHTML)
+
 GET_PROPERTY(_targets GLOBAL PROPERTY DOC_TARGETS)
 add_custom_target(docs ALL DEPENDS ${_targets})

+ 11 - 0
docs/DynamicESDL/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} DynamicESDL_Includer.xml "DynamicESDL" "DESDL-Mods")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*DynamicESDL.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+    ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/DynamicESDL_Includer.xml" ${PORTAL_HTML_DIR}/DynamicESDL  "dyanmic_esdl_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 4 - 4
docs/DynamicESDL/DynamicESDL_Includer.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -552,7 +552,7 @@ OUTPUT(ds_out, NAMED('AddThisResponse')); </programlisting>
   </chapter>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml"
-              xpointer="ESDL_CLI" xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xpointer="xpointer(//*[@id='ESDL_CLI'])" xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <chapter>
     <title>ESDL Language Reference</title>

+ 11 - 0
docs/ECLLanguageReference/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} ECLR-includer.xml "ECLLanguageReference" "ECLR_mods")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*ECLLanguageReference.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+    ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/ECLR-includer.xml" ${PORTAL_HTML_DIR}/ECLR  "lang_ref_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 1 - 1
docs/ECLLanguageReference/ECLR-includer.xml

@@ -38,7 +38,7 @@
       "A"</link> (WHICH SEE).</para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <releaseinfo>© 2017 HPCC Systems<superscript>®</superscript>. All rights

+ 38 - 14
docs/ECLLanguageReference/ECLR_mods/BltInFunc-GROUP.xml

@@ -16,7 +16,11 @@
   role="bold">LOCAL<indexterm>
       <primary>LOCAL</primary>
     </indexterm></emphasis><emphasis> </emphasis><emphasis role="bold">]
-  </emphasis> <emphasis role="bold">[, UNORDERED | ORDERED(</emphasis> <emphasis>bool </emphasis><emphasis role="bold">) ] [, STABLE | UNSTABLE ] [, PARALLEL [ (</emphasis> <emphasis>numthreads </emphasis><emphasis role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name </emphasis><emphasis role="bold">) ] )</emphasis></para>
+  </emphasis> <emphasis role="bold">[, UNORDERED | ORDERED(</emphasis>
+  <emphasis>bool </emphasis><emphasis role="bold">) ] [, STABLE | UNSTABLE ]
+  [, PARALLEL [ (</emphasis> <emphasis>numthreads </emphasis><emphasis
+  role="bold">) ] ] [, ALGORITHM(</emphasis> <emphasis>name
+  </emphasis><emphasis role="bold">) ] )</emphasis></para>
 
   <para><informaltable colsep="1" frame="all" rowsep="1">
       <tgroup cols="2">
@@ -61,50 +65,70 @@
             with all other nodes to acquire data; the operation maintains the
             distribution of any previous DISTRIBUTE.</entry>
           </row>
+
           <row>
             <entry><emphasis role="bold">UNORDERED</emphasis></entry>
 
-            <entry>Optional. Specifies the output record order is not significant.</entry>
+            <entry>Optional. Specifies the output record order is not
+            significant.</entry>
           </row>
+
           <row>
             <entry><emphasis role="bold">ORDERED</emphasis></entry>
 
-            <entry>Specifies the significance of the output record order.</entry>
+            <entry>Specifies the significance of the output record
+            order.</entry>
           </row>
+
           <row>
             <entry><emphasis>bool</emphasis></entry>
 
-            <entry>When False, specifies the output record order is not significant. When True, specifies the default output record order.</entry>
+            <entry>When False, specifies the output record order is not
+            significant. When True, specifies the default output record
+            order.</entry>
           </row>
+
           <row>
             <entry><emphasis role="bold">STABLE</emphasis></entry>
 
-            <entry>Optional. Specifies the input record order is significant.</entry>
+            <entry>Optional. Specifies the input record order is
+            significant.</entry>
           </row>
+
           <row>
             <entry><emphasis role="bold">UNSTABLE</emphasis></entry>
 
-            <entry>Optional. Specifies the input record order is not significant.</entry>
+            <entry>Optional. Specifies the input record order is not
+            significant.</entry>
           </row>
+
           <row>
             <entry><emphasis role="bold">PARALLEL</emphasis></entry>
 
-            <entry>Optional. Try to evaluate this activity in parallel.</entry>
+            <entry>Optional. Try to evaluate this activity in
+            parallel.</entry>
           </row>
+
           <row>
             <entry><emphasis>numthreads</emphasis></entry>
 
-            <entry>Optional. Try to evaluate this activity using <emphasis>numthreads</emphasis> threads.</entry>
+            <entry>Optional. Try to evaluate this activity using
+            <emphasis>numthreads</emphasis> threads.</entry>
           </row>
+
           <row>
             <entry><emphasis role="bold">ALGORITHM</emphasis></entry>
 
-            <entry>Optional. Override the algorithm used for this activity.</entry>
+            <entry>Optional. Override the algorithm used for this
+            activity.</entry>
           </row>
+
           <row>
             <entry><emphasis>name</emphasis></entry>
 
-            <entry>The algorithm to use for this activity. Must be from the list of supported algorithms for the SORT function's STABLE and UNSTABLE options.</entry>
+            <entry>The algorithm to use for this activity. Must be from the
+            list of supported algorithms for the SORT function's STABLE and
+            UNSTABLE options.</entry>
           </row>
 
           <row>
@@ -127,9 +151,7 @@
 
   <para>The <emphasis>recordset</emphasis> must be sorted by the same elements
   as the <emphasis>breakcriteria</emphasis> if the ALL option is not
-  specified. The maximum size allowed for any one subgroup is 64 Mb and
-  subgroups never span nodes; if the <emphasis>breakcriteria</emphasis>
-  results in a subgroup larger than 64 Mb, an error occurs.</para>
+  specified. </para>
 
   <para>The <emphasis>recordset</emphasis> gets ‘ungrouped’ by use in a TABLE
   function, by the JOIN function in some circumstances (see JOIN), by UNGROUP,
@@ -152,5 +174,7 @@ UnGroupedSet := GROUP(GroupedSet); //ungroup the dataset
 MyTable := TABLE(SecondSort,MyRec); //create table of sorted names
 </programlisting>
 
-  <para>See Also: <link linkend="REGROUP">REGROUP</link>, <link linkend="COMBINE">COMBINE</link>, <link linkend="UNGROUP">UNGROUP</link>, <link linkend="EXCEPT">EXCEPT</link></para>
+  <para>See Also: <link linkend="REGROUP">REGROUP</link>, <link
+  linkend="COMBINE">COMBINE</link>, <link linkend="UNGROUP">UNGROUP</link>,
+  <link linkend="EXCEPT">EXCEPT</link></para>
 </sect1>

+ 19 - 10
docs/ECLLanguageReference/ECLR_mods/Recrd-ScopeNLogicalFilenames.xml

@@ -13,16 +13,25 @@
         <primary>File Scope</primary>
       </indexterm></title>
 
-    <para><emphasis role="bold">The logical filenames used in DATASET and
-    INDEX attribute definitions and the OUTPUT and BUILD (or BUILDINDEX)
-    actions may begin with a scope name, indicated by a leading tilde (~), and
-    may contain directories. The scope and directories are delimited by double
-    colons (::). The presence of a scope in the filename allows you to
-    override the default scope name for the cluster.</emphasis></para>
-
-    <para>For example, assuming you are operating on a cluster whose default
-    scope name is “Training” then the following two OUTPUT actions result in
-    the same scope:</para>
+    <para>The logical filenames used in DATASET and INDEX attribute
+    definitions and the OUTPUT and BUILD (or BUILDINDEX) actions can
+    optionally begin with a ~ meaning it is absolute, otherwise it is relative
+    (the platform configured scope prefix is prepended). It may contain scopes
+    delimited by double colons (::) with the final portion being the filename.
+    It cannot have a trailing double colons (::). A cluster qualifier can be
+    specified. For example, ~myfile@mythor2 points to one file where the file
+    is on multiple clusters in the same scope. Valid characters of a scope or
+    filename are ASCII &gt;32 &lt; 127 except * " / : &lt; &gt; ? and
+    |.</para>
+
+    <para>To reference uppercase characters in physical file paths and
+    filenames, use the caret character (^). For example,
+    '~file::10.150.254.6::var::lib::^h^p^c^c^systems::mydropzone::^people.txt'.</para>
+
+    <para>The presence of a scope in the filename allows you to override the
+    default scope name for the cluster. For example, assuming you are
+    operating on a cluster whose default scope name is “Training” then the
+    following two OUTPUT actions result in the same scope:</para>
 
     <programlisting>OUTPUT(SomeFile,,'SomeDir::SomeFileOut1');
 OUTPUT(SomeFile,,'~Training::SomeDir::SomeFileOut2');</programlisting>

+ 14 - 3
docs/ECLLanguageReference/ECLR_mods/WkFlo-INDEPENDENT.xml

@@ -5,9 +5,11 @@
   <title>INDEPENDENT</title>
 
   <para><emphasis>attribute </emphasis>:= <emphasis>expression
-  </emphasis><emphasis role="bold">: INDEPENDENT<indexterm>
+  </emphasis><emphasis role="bold">: INDEPENDENT
+  [</emphasis><emphasis>(cluster)</emphasis><emphasis role="bold">]</emphasis>
+  <indexterm>
       <primary>INDEPENDENT</primary>
-    </indexterm></emphasis><indexterm>
+    </indexterm><indexterm>
       <primary>INDEPENDENT workflow service</primary>
     </indexterm>;</para>
 
@@ -29,6 +31,15 @@
 
             <entry>The definition of the attribute.</entry>
           </row>
+
+          <row>
+            <entry><emphasis>cluster</emphasis></entry>
+
+            <entry>Optional. A string constant specifying the name of the Thor
+            cluster on which execute. If omitted, the
+            <emphasis>attribute</emphasis> is run on the currently executing
+            cluster.</entry>
+          </row>
         </tbody>
       </tgroup>
     </informaltable></para>
@@ -69,7 +80,7 @@
                                      'mythor',DestPath+File2,
                                      -1,ESPportIP))
                            : INDEPENDENT;
-  SEQUENTIAL(DeleteOldFiles,SprayNewFiles);
+    SEQUENTIAL(DeleteOldFiles,SprayNewFiles);
 </programlisting>
 
   <para>See Also: <link linkend="GLOBAL">GLOBAL</link></para>

+ 12 - 0
docs/ECLPlayground/CMakeLists.txt

@@ -16,3 +16,15 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} ECLPlayground-includer.xml "ECL_Playground" "ECLPlay-Mods")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*ECL_Playground.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+    ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/ECLPlayground-includer.xml" ${PORTAL_HTML_DIR}/ECLPlayground  "play_ground_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+
+ENDIF(MAKE_DOCS)

+ 4 - 4
docs/ECLPlayground/ECLPlayground-includer.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -62,7 +62,7 @@
     <title><emphasis>ECL Playground</emphasis></title>
 
     <xi:include href="ECLPlayground/ECLPlay-Mods/ECL_Playground.xml"
-                xpointer="ECL_Playground"
+                xpointer="xpointer(//*[@id='ECL_Playground'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 </book>

+ 11 - 0
docs/ECLPluginForEclipse/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} ECL_Plugin_for_Eclipse.xml "ECL_Plugin_for_EclipseIDE")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*ECL_Plugin_for_EclipseIDE.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+    ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/ECL_Plugin_for_Eclipse.xml" ${PORTAL_HTML_DIR}/Eclipse_Plugin  "eclipse_plugin_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 3 - 3
docs/ECLPluginForEclipse/ECL_Plugin_for_Eclipse.xml

@@ -40,12 +40,12 @@
       <para><emphasis role="redbold"> </emphasis></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--Release Info makes a running page footer:now an include from version.xml-->
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--The include statement pulls in the date_ver from version.xml-->
@@ -54,7 +54,7 @@
 
     <!--corpname never prints-->
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--Copyright tag now gets copyright from version.xml-->

+ 10 - 0
docs/ECLProgrammersGuide/CMakeLists.txt

@@ -29,4 +29,14 @@ IF(MAKE_DOCS)
 	)
 
   ADD_CUSTOM_TARGET(ECL_Code_Files ALL DEPENDS  ${zip_out_dir}/ECL_Code_Files.zip)
+
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*ECLProgrammersGuide.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/PrGd-Includer.xml" ${PORTAL_HTML_DIR}/ProgrammersGuide  "programmers_guide_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
 ENDIF(MAKE_DOCS)

+ 3 - 3
docs/ECLProgrammersGuide/PrGd-Includer.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">

+ 7 - 1
docs/ECLReference/ECLReference.xml

@@ -5,7 +5,13 @@
   <title>ECL Reference</title>
 
   <setinfo>
-    <corpauthor>HPCC Systems<superscript>®</superscript></corpauthor>
+    <corpauthor>HPCC Systems<superscript>®</superscript>
+      <para>
+        <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='CHMVer'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+      </para>
+    </corpauthor>
+
   </setinfo>
 
   <xi:include href="../ECLLanguageReference/ECLR-includer.xml"

+ 13 - 1
docs/ECLScheduler/CMakeLists.txt

@@ -14,4 +14,16 @@
 #    limitations under the License.
 ################################################################################
 
-DOCBOOK_TO_PDF( ${FO_XSL} ECLScheduler.xml "TheECLScheduler" "ECLSched-Mods")
+DOCBOOK_TO_PDF( ${FO_XSL} ECLScheduler.xml "TheECLScheduler" "ECLSched-Mods")
+
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*TheECLScheduler.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/ECLScheduler.xml" ${PORTAL_HTML_DIR}/Scheduler  "scheduler_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 12 - 12
docs/ECLScheduler/ECLScheduler.xml

@@ -42,15 +42,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems</corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -112,11 +112,11 @@
   </chapter>
 
   <xi:include href="ECLScheduler/ECLSched-Mods/ECLSchedComp.xml"
-              xpointer="ECLSched_comp"
+              xpointer="xpointer(//*[@id='ECLSched_comp'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="ECLScheduler/ECLSched-Mods/ECLSchedAdmin.xml"
-              xpointer="ECLSched-Admin"
+              xpointer="xpointer(//*[@id='ECLSched-Admin'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <chapter>
@@ -130,7 +130,7 @@
       <title>WHEN</title>
 
       <xi:include href="ECLLanguageReference/ECLR_mods/BltInFunc-WHEN.xml"
-                  xpointer="SchWhen"
+                  xpointer="xpointer(//*[@id='SchWhen'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
 
@@ -138,7 +138,7 @@
       <title>NOTIFY</title>
 
       <xi:include href="ECLLanguageReference/ECLR_mods/BltInFunc-NOTIFY.xml"
-                  xpointer="SchNOTIFY"
+                  xpointer="xpointer(//*[@id='SchNOTIFY'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
 
@@ -146,7 +146,7 @@
       <title>EVENT</title>
 
       <xi:include href="ECLLanguageReference/ECLR_mods/BltInFunc-EVENT.xml"
-                  xpointer="SchEvent"
+                  xpointer="xpointer(//*[@id='SchEvent'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
 
@@ -154,7 +154,7 @@
       <title>CRON</title>
 
       <xi:include href="ECLLanguageReference/ECLR_mods/BltInFunc-CRON.xml"
-                  xpointer="SchCRON"
+                  xpointer="xpointer(//*[@id='SchCRON'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
 
@@ -162,7 +162,7 @@
       <title>WAIT</title>
 
       <xi:include href="ECLLanguageReference/ECLR_mods/BltInFunc-WAIT.xml"
-                  xpointer="SchWAIT"
+                  xpointer="xpointer(//*[@id='SchWAIT'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
   </chapter>
@@ -174,11 +174,11 @@
     in the ECL Standard Library Reference.</para>
 
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/MonitorFile.xml"
-                xpointer="MonitorFile"
+                xpointer="xpointer(//*[@id='MonitorFile'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/MonitorLogicalFileName.xml"
-                xpointer="MonitorLogicalFileName"
+                xpointer="xpointer(//*[@id='MonitorLogicalFileName'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 </book>

+ 13 - 0
docs/ECLStandardLibraryReference/CMakeLists.txt

@@ -15,3 +15,16 @@
 ################################################################################
 
 DOCBOOK_TO_PDF( ${FO_XSL} SLR-includer.xml "ECLStandardLibraryReference" "SLR-Mods")
+
+
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*ECLStandardLibraryReference.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+    ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/SLR-includer.xml" ${PORTAL_HTML_DIR}/SLR  "stdlib_ref_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 72 - 0
docs/ECLStandardLibraryReference/SLR-Mods/FindWord.xml

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1 id="FindWord">
+  <title>FindWord</title>
+
+  <para><emphasis role="bold">STD.Str.FindWord<indexterm>
+      <primary>STD.Str.FindWord</primary>
+    </indexterm><indexterm>
+      <primary>Str.FindWord</primary>
+    </indexterm><indexterm>
+      <primary>FindWord</primary>
+    </indexterm>(</emphasis> <emphasis>src, word, ignore_case</emphasis>
+  <emphasis role="bold">)</emphasis> <emphasis role="bold"></emphasis></para>
+
+  <para><emphasis role="bold">STD.Uni.FindWord<indexterm>
+      <primary>STD.Uni.FindWord</primary>
+    </indexterm><indexterm>
+      <primary>Uni.FindWord</primary>
+    </indexterm>(</emphasis> <emphasis>src, word, ignore_case</emphasis>
+  <emphasis role="bold">)</emphasis> <emphasis role="bold"></emphasis></para>
+
+  <informaltable colsep="1" frame="all" rowsep="1">
+    <tgroup cols="2">
+      <colspec colwidth="80.50pt" />
+
+      <colspec />
+
+      <tbody>
+        <row>
+          <entry><emphasis>src</emphasis></entry>
+
+          <entry>A string containing the data to search.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>word </emphasis></entry>
+
+          <entry>A string containing the substring to search for.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>ignore_case </emphasis></entry>
+
+          <entry>A boolean true or false to indicate whether to ignore the
+          case.</entry>
+        </row>
+
+        <row>
+          <entry>Return:<emphasis> </emphasis></entry>
+
+          <entry>FindWord returns a BOOLEAN value.</entry>
+        </row>
+      </tbody>
+    </tgroup>
+  </informaltable>
+
+  <para>The <emphasis role="bold">FindWord </emphasis>functions return TRUE if
+  the <emphasis>word</emphasis> string is found in <emphasis>src</emphasis>
+  string. </para>
+
+  <para>Example:</para>
+
+  <programlisting format="linespecific">IMPORT STD;
+src := 'Now is the winter of our discontent';
+word := 'now';
+
+STD.Str.FindWord(src,word);      // false - case not ignored
+STD.Str.FindWord(src,word,TRUE); // true  - with case ignored word is found</programlisting>
+
+  <para></para>
+</sect1>

+ 6 - 3
docs/ECLStandardLibraryReference/SLR-includer.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -294,6 +294,9 @@
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/FindReplace.xml"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
+    <xi:include href="ECLStandardLibraryReference/SLR-Mods/FindWord.xml"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/FromHexPairs.xml"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 

+ 11 - 0
docs/ECLWatch/CMakeLists.txt

@@ -18,3 +18,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} TheECLWatchMan.xml "The_ECL_Watch_Manual" "ECLWa_mods")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*The_ECL_Watch_Manual.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/TheECLWatchMan.xml" ${PORTAL_HTML_DIR}/ECLWatchMan  "eclwatch_man_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 25 - 25
docs/ECLWatch/TheECLWatchMan.xml

@@ -42,15 +42,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -565,7 +565,7 @@
     </sect1>
 
     <xi:include href="ECLScheduler/ECLSched-Mods/ECLSchedComp.xml"
-                xpointer="ECLSched_Interface"
+                xpointer="xpointer(//*[@id='ECLSched_Interface'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <sect1>
@@ -672,11 +672,11 @@
     workunits there, but you can perform operations on workunits.</para>
 
     <xi:include href="ECLWatch/ECLWa_mods/ECLWatchSrc.xml"
-                xpointer="ECLWorkunits"
+                xpointer="xpointer(//*[@id='ECLWorkunits'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="ECLPlayground/ECLPlay-Mods/ECL_Playground.xml"
-                xpointer="ECL_Playground"
+                xpointer="xpointer(//*[@id='ECL_Playground'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 
@@ -695,15 +695,15 @@
     <!--  Might this be chapter for Xref?***-->
 
     <xi:include href="ECLWatch/ECLWa_mods/ECLWatchSrc.xml"
-                xpointer="ECLWatchLogicalFiles"
+                xpointer="xpointer(//*[@id='ECLWatchLogicalFiles'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="ECLWatch/ECLWa_mods/ECLWatchSrc.xml"
-                xpointer="DFUWorkunits"
+                xpointer="xpointer(//*[@id='DFUWorkunits'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="ECLWatch/ECLWa_mods/ECLWatchSrc.xml"
-                xpointer="Landing_Zones"
+                xpointer="xpointer(//*[@id='Landing_Zones'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <sect1 id="spray_and_despray">
@@ -742,42 +742,42 @@
       </sect2>
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="LZ_Spray"
+                  xpointer="xpointer(//*[@id='LZ_Spray'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Spray_Fixed"
+                  xpointer="xpointer(//*[@id='Spray_Fixed'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Spray_Delimited"
+                  xpointer="xpointer(//*[@id='Spray_Delimited'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Spray_XML"
+                  xpointer="xpointer(//*[@id='Spray_XML'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Spray_JSON"
+                  xpointer="xpointer(//*[@id='Spray_JSON'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Spray_Variable"
+                  xpointer="xpointer(//*[@id='Spray_Variable'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Spray_Blob"
+                  xpointer="xpointer(//*[@id='Spray_Blob'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Desprays"
+                  xpointer="xpointer(//*[@id='Desprays'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-      <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml" xpointer="Copy"
+      <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml" xpointer="xpointer(//*[@id='Copy'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
 
       <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                  xpointer="Remote_Copy"
+                  xpointer="xpointer(//*[@id='Remote_Copy'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
 
@@ -981,7 +981,7 @@
     </figure>
 
     <xi:include href="ECLWatch/ECLWa_mods/ECLWatchQueries.xml"
-                xpointer="Queries_Page"
+                xpointer="xpointer(//*[@id='Queries_Page'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 
@@ -1322,11 +1322,11 @@
     </sect1>
 
     <xi:include href="HPCCCertify/Cert-Mods/CertPreflight.xml"
-                xpointer="Preflight_system_servers"
+                xpointer="xpointer(//*[@id='Preflight_system_servers'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCCertify/Cert-Mods/CertPreflight.xml"
-                xpointer="Preflight_Data_Refinery"
+                xpointer="xpointer(//*[@id='Preflight_Data_Refinery'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--
@@ -1341,7 +1341,7 @@
       from the ECL Watch interface.</para>
 
       <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml"
-                  xpointer="Sec_Adm_w_ECLWatch"
+                  xpointer="xpointer(//*[@id='Sec_Adm_w_ECLWatch'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1> 
  -->
@@ -1357,7 +1357,7 @@
       Watch.</para>
 
       <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml"
-                  xpointer="Sec_Adm_w_ECLWatch"
+                  xpointer="xpointer(//*[@id='Sec_Adm_w_ECLWatch'])"
                   xmlns:xi="http://www.w3.org/2001/XInclude" />
     </sect1>
   </chapter>
@@ -1453,7 +1453,7 @@
     </sect1>
 
     <xi:include href="HPCCMonitoring/MonRep-Mods/NagiosInECLWa.xml"
-                xpointer="Nagios_in_ECLWatch"
+                xpointer="xpointer(//*[@id='Nagios_in_ECLWatch'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 

+ 11 - 8
docs/EclipseHelp/CMakeLists.txt

@@ -13,14 +13,17 @@
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
 ################################################################################
-set (ECLIPSE_HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/eclipse_html)
+IF(MAKE_DOCS)
+  set (ECLIPSE_HTML_DIR ${CMAKE_CURRENT_BINARY_DIR}/eclipse_html)
 
-GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
-SET(HELP_DEPENDENCIES)
-FOREACH(T ${Current_Targets})
-   IF("${T}" MATCHES ".*ECLReference.*")
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  SET(HELP_DEPENDENCIES)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*ECLReference.*")
       LIST(APPEND HELP_DEPENDENCIES  ${T})
-   ENDIF()
-ENDFOREACH()
+    ENDIF()
+  ENDFOREACH()
 
-DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} ${ECL_REFERENCE_XML} ${ECLIPSE_HTML_DIR})
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} ${ECL_REFERENCE_XML} ${ECLIPSE_HTML_DIR} "eclipse_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "doc_generate_html_zip")
+
+ENDIF(MAKE_DOCS)

+ 12 - 0
docs/HPCCCertify/CMakeLists.txt

@@ -16,3 +16,15 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} certify.xml "HPCCCertification")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*HPCCCertification.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/certify.xml" ${PORTAL_HTML_DIR}/Certification  "certify_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)
+

+ 6 - 6
docs/HPCCCertify/certify.xml

@@ -42,15 +42,15 @@ Date is used as the dateline/version number in the title page. The ID attribute
 Copyright is used for the copyright line on title page. The ID attribute is CopyRight--></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -191,14 +191,14 @@ Copyright is used for the copyright line on title page. The ID attribute is Copy
   </chapter>
 
   <xi:include href="HPCCCertify/Cert-Mods/CertPreflight.xml"
-              xpointer="Cert_Prelight"
+              xpointer="xpointer(//*[@id='Cert_Prelight'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCCertify/Cert-Mods/CertThorRox.xml"
-              xpointer="Generate_Certification_data_file"
+              xpointer="xpointer(//*[@id='Generate_Certification_data_file'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCCertify/Cert-Mods/CertSprayDespray.xml"
-              xpointer="Cert_Spray_Despray"
+              xpointer="xpointer(//*[@id='Cert_Spray_Despray'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 </book>

+ 23 - 0
docs/HPCCClientTools/CMakeLists.txt

@@ -18,3 +18,26 @@ DOCBOOK_TO_PDF( ${FO_XSL} ClientTools.xml "HPCCClientTools" "CT_Mods")
 
 DOCBOOK_TO_PDF( ${FO_XSL} TheECLIDEandHPCCClientTools.xml "TheECLIDEandHPCCClientTools" "CT_Mods")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*HPCCClientTools.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/ClientTools.xml" ${PORTAL_HTML_DIR}/ClientTools  "clienttools_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*TheECLIDEandHPCCClientTools.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/TheECLIDEandHPCCClientTools.xml" ${PORTAL_HTML_DIR}/ECLIDEandClientTools "eclide_clienttools_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+
+
+ENDIF(MAKE_DOCS)

+ 1 - 1
docs/HPCCClientTools/CT_Mods/CT_ECL_IDE.xml

@@ -2788,7 +2788,7 @@ ENDMACRO;
                 </row>
 
                 <row>
-                  <entry>Ctrl+Alt+Enter</entry>
+                  <entry>Ctrl+Shift+Enter</entry>
 
                   <entry>Submit Selected ECL</entry>
                 </row>

+ 9 - 9
docs/HPCCClientTools/ClientTools.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -59,24 +59,24 @@
   </bookinfo>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml"
-              xpointer="CT_Overview"
+              xpointer="xpointer(//*[@id='CT_Overview'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml"
-              xpointer="Command_Line_ECL"
+              xpointer="xpointer(//*[@id='Command_Line_ECL'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="ECL_CLI"
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="xpointer(//*[@id='ECL_CLI'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="ECL_Compiler"
+  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="xpointer(//*[@id='ECL_Compiler'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml"
-              xpointer="Command_Line_DFU"
+              xpointer="xpointer(//*[@id='Command_Line_DFU'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml"
-              xpointer="ESDL_CLI" xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xpointer="xpointer(//*[@id='ESDL_CLI'])" xmlns:xi="http://www.w3.org/2001/XInclude" />
               
 </book>

+ 10 - 10
docs/HPCCClientTools/TheECLIDEandHPCCClientTools.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -59,26 +59,26 @@
   </bookinfo>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Overview.xml"
-              xpointer="CT_Overview"
+              xpointer="xpointer(//*[@id='CT_Overview'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_IDE.xml"
-              xpointer="The_ECL_Ide"
+              xpointer="xpointer(//*[@id='The_ECL_Ide'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml"
-              xpointer="Command_Line_ECL"
+              xpointer="xpointer(//*[@id='Command_Line_ECL'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="ECL_CLI"
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="xpointer(//*[@id='ECL_CLI'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="ECL_Compiler"
+  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="xpointer(//*[@id='ECL_Compiler'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml"
-              xpointer="Command_Line_DFU"
+              xpointer="xpointer(//*[@id='Command_Line_DFU'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
   <xi:include href="HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml"
-              xpointer="ESDL_CLI" xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xpointer="xpointer(//*[@id='ESDL_CLI'])" xmlns:xi="http://www.w3.org/2001/XInclude" />
 </book>

+ 11 - 0
docs/HPCCDataHandling/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} DataHandling.xml "HPCCDataHandling" "DH-Mods")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*HPCCDataHandling.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/DataHandling.xml" ${PORTAL_HTML_DIR}/DataHandling "datahandling_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 7 - 7
docs/HPCCDataHandling/DataHandling.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -128,19 +128,19 @@
     </sect1>
 
     <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                xpointer="Data_Handling_Terms"
+                xpointer="xpointer(//*[@id='Data_Handling_Terms'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                xpointer="Working_with_a_data_file"
+                xpointer="xpointer(//*[@id='Working_with_a_data_file'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                xpointer="Data_Handling_Methods"
+                xpointer="xpointer(//*[@id='Data_Handling_Methods'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCDataHandling/DH-Mods/DH-Mod1.xml"
-                xpointer="Data_Handling_Using_ECL-Watch"
+                xpointer="xpointer(//*[@id='Data_Handling_Using_ECL-Watch'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 

+ 10 - 0
docs/HPCCDataTutorial/CMakeLists.txt

@@ -15,4 +15,14 @@
 ################################################################################
 
 DOCBOOK_TO_PDF( ${FO_XSL} DataTutorial.xml "HPCCDataTutorial")
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*HPCCDataTutorial.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
 
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/DataTutorial.xml" ${PORTAL_HTML_DIR}/DataTutorial  "data_tutorial_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 3 - 3
docs/HPCCDataTutorial/DataTutorial.xml

@@ -42,21 +42,21 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--Release Info makes a running page footer: now an include! -->
 
     <!--The following include statement pulls in the date_ver from version.xml-->
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
     <!--corpname never prints-->
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--Copyright tag inserts the symbol automatically: Now an Include!-->

+ 10 - 0
docs/HPCCMonitoring/CMakeLists.txt

@@ -15,4 +15,14 @@
 ################################################################################
 
 DOCBOOK_TO_PDF( ${FO_XSL} HPCCMonitoringAndReporting.xml "HPCC_Monitoring_and_Reporting")
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*Monitoring_and_Reporting.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
 
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/HPCCMonitoringAndReporting.xml" ${PORTAL_HTML_DIR}/Monitoring_and_Reporting  "monitor_reporting_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 4 - 4
docs/HPCCMonitoring/HPCCMonitoringAndReporting.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -1475,7 +1475,7 @@
     </sect1>
 
     <xi:include href="HPCCMonitoring/MonRep-Mods/NagiosInECLWa.xml"
-                xpointer="Nagios_in_ECLWatch"
+                xpointer="xpointer(//*[@id='Nagios_in_ECLWatch'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 </book>

+ 22 - 0
docs/HPCCSystemAdmin/CMakeLists.txt

@@ -17,3 +17,25 @@
 DOCBOOK_TO_PDF( ${FO_XSL} HPCCSystemAdministratorsGuide.xml "HPCCSystemAdministratorsGuide" "SA-Mods")
 
 DOCBOOK_TO_PDF( ${FO_XSL} SecMgrInc.xml "HPCCSecurityManagerGuide" "SA-Mods")
+
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*SystemAdministratorsGuide.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/HPCCSystemAdministratorsGuide.xml" ${PORTAL_HTML_DIR}/SystemAdministratorsGuide  "system_administration_guide_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*SecurityManagerGuide.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/SecMgrInc.xml" ${PORTAL_HTML_DIR}/SecurityManagerGuide  "security_manager_guide_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 40 - 18
docs/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml

@@ -42,15 +42,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -427,19 +427,19 @@
     your specific enterprise needs.</para>
 
     <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/Hardware.xml"
-                xpointer="HW-Switch"
+                xpointer="xpointer(//*[@id='HW-Switch'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/Hardware.xml"
-                xpointer="HW-LoadBalancer"
+                xpointer="xpointer(//*[@id='HW-LoadBalancer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="System_sizings"
+                xpointer="xpointer(//*[@id='System_sizings'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/Hardware.xml"
-                xpointer="Nodes-Software"
+                xpointer="xpointer(//*[@id='Nodes-Software'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 
@@ -1001,7 +1001,7 @@
   </chapter>
 
   <xi:include href="HPCCCertify/Cert-Mods/CertPreflight.xml"
-              xpointer="Cert_Prelight"
+              xpointer="xpointer(//*[@id='Cert_Prelight'])"
               xmlns:xi="http://www.w3.org/2001/XInclude" />
 
   <chapter id="OnDemand_Maintenance">
@@ -1031,29 +1031,29 @@
     <!--/*Including special SysAdmin Config Module -paras- */-->
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="cfgmgr_introP0"
+                xpointer="xpointer(//*[@id='cfgmgr_introP0'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="cfgmgr_introP1"
+                xpointer="xpointer(//*[@id='cfgmgr_introP1'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="cfgmgr_p1b"
+                xpointer="xpointer(//*[@id='cfgmgr_p1b'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="cfgmgr_introP2"
+                xpointer="xpointer(//*[@id='cfgmgr_introP2'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="cfgmgr_introP3"
+                xpointer="xpointer(//*[@id='cfgmgr_introP3'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <!--/*Including special SysAdmin Config Module -Sect1- */-->
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="configuring-a-multi-node-system"
+                xpointer="xpointer(//*[@id='configuring-a-multi-node-system'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <sect1 id="SysAdm_Env.conf">
@@ -1227,7 +1227,7 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfile</programlisting>Set the <emphasis
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml"
-                xpointer="User_Security_Maint"
+                xpointer="xpointer(//*[@id='User_Security_Maint'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <sect1 id="SysAdm_WUs_ActiveDir">
@@ -1310,7 +1310,7 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfile</programlisting>Set the <emphasis
     </sect1>
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/CassandraWUServer.xml"
-                xpointer="CassandraWUStorage"
+                xpointer="xpointer(//*[@id='CassandraWUStorage'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <sect1 id="Redefining_Thor_Nodes">
@@ -1677,6 +1677,28 @@ dfsSSLPrivateKeyFile=/keyfilepath/keyfile</programlisting>Set the <emphasis
           slaves with less memory/cpu taking longer than the rest and dragging
           the whole performance of the cluster down as a result.</para>
         </sect3>
+
+        <sect3 id="Thor_TimesOut">
+          <title>Thor times out</title>
+
+          <para>There is a case where a system policy or practice could cause
+          an issue with Thor nodes. At startup if a Thor cluster hangs, and
+          then eventually times out. Then if your Thormaster log shows that
+          the master is fine, but indicates that it is waiting to connect the
+          slaves. Then you may have an issue with the SSH daemon
+          configuration. </para>
+
+          <para>There is a security feature called
+          <emphasis>"AllowUsers"</emphasis> that creates a white list in sshd
+          (the OpenSSH server process) that will disallow connections from
+          anyone not declared on that list. This is not default for sshd,
+          rather it is an option that must be enabled. If that option is
+          enabled that can cause the Thor nodes to hang in the manner
+          described. If that option is enabled, then you must unset the
+          option, or add the hpcc user to the AllowUsers list. </para>
+
+          <para> </para>
+        </sect3>
       </sect2>
 
       <sect2 id="virtual-thor-slaves">
@@ -1894,11 +1916,11 @@ heapUseTransparentHugePages</programlisting>
     </sect1>
 
     <xi:include href="RoxieReference/RoxieRefMods/RoxieCapacityPlanning.xml"
-                xpointer="Capacity_Planning"
+                xpointer="xpointer(//*[@id='Capacity_Planning'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <xi:include href="HPCCSystemAdmin/SA-Mods/SysAdminConfigMod.xml"
-                xpointer="Sample_Sizings"
+                xpointer="xpointer(//*[@id='Sample_Sizings'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 

+ 3 - 3
docs/HPCCSystemAdmin/SecMgrInc.xml

@@ -34,15 +34,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">

+ 26 - 0
docs/HTMLHelp/CMakeLists.txt

@@ -0,0 +1,26 @@
+################################################################################
+#    HPCC SYSTEMS software Copyright (C) 2012 HPCC Systems®.
+#
+#    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.
+################################################################################
+set (HTML_HELP_DIR ${CMAKE_CURRENT_BINARY_DIR}/html_help)
+
+GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+SET(HELP_DEPENDENCIES)
+FOREACH(T ${Current_Targets})
+   IF("${T}" MATCHES ".*ECLReference.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+   ENDIF()
+ENDFOREACH()
+
+DOCBOOK_TO_HTML(${HTML_HELP_XSL} ${ECL_REFERENCE_XML} ${HTML_HELP_DIR} "html_help" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "doc_htmlhelp_zip")

+ 11 - 0
docs/Installing_and_RunningTheHPCCPlatform/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} Installing_and_RunningTheHPCCPlatform.xml "Installing_and_RunningTheHPCCPlatform")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*Installing_and_RunningTheHPCCPlatform.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/Installing_and_RunningTheHPCCPlatform.xml" ${PORTAL_HTML_DIR}/Installing_and_Running  "install_and_running_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 31 - 5
docs/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -3407,6 +3407,34 @@ SUM(NOFOLD(s1b + s2b), a);
           </listitem>
         </orderedlist>
 
+        <para> </para>
+
+        <sect3 id="R_DataTypes">
+          <title>Mapping Datatypes</title>
+
+          <para>Some additional considerations for mapping data types in R.
+          </para>
+
+          <para>In HPCC the ECL <emphasis role="bold">RECORD</emphasis> maps
+          to an R <emphasis>list</emphasis>. </para>
+
+          <para>An ECL <emphasis role="bold">DATASET</emphasis> including a
+          nested dataset is mapped to an R <emphasis>dataframe</emphasis>.
+          </para>
+
+          <para>An ECL <emphasis role="bold">SET</emphasis> is mapped to an R
+          <emphasis>vector</emphasis>. </para>
+
+          <para>These principals apply to passing data from HPCC to R or data
+          returning to HPCC from R. There are usage examples of these concepts
+          available at:</para>
+
+          <para><ulink
+          url="https://github.com/hpcc-systems/HPCC-Platform/tree/master/testing/ecl/regress/embedR2.ecl">https://github.com/hpcc-systems/HPCC-Platform/tree/master/testing/regress/ecl/embedR2.ecl</ulink></para>
+
+          <para> </para>
+        </sect3>
+
         <sect3>
           <title>R Scope Options</title>
 
@@ -3438,8 +3466,6 @@ SUM(NOFOLD(s1b + s2b), a);
           until the end of the current workunit or the current instance of a
           Roxie deployed query, and are not shared with other
           instances.</para>
-
-          <para></para>
         </sect3>
       </sect2>
     </sect1>

+ 13 - 1
docs/InstantCloud/CMakeLists.txt

@@ -14,4 +14,16 @@
 #    limitations under the License.
 ################################################################################
 
-DOCBOOK_TO_PDF( ${FO_XSL} InstantCloud.xml "InstantCloud_for_AWS")
+DOCBOOK_TO_PDF( ${FO_XSL} InstantCloud.xml "InstantCloud_for_AWS")
+
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*InstantCloud_for_AWS.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/InstantCloud.xml" ${PORTAL_HTML_DIR}/InstantCloud_for_AWS  "instantcloud_for_aws_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 3 - 3
docs/InstantCloud/InstantCloud.xml

@@ -51,15 +51,15 @@
       <para><emphasis role="redbold"></emphasis></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems</corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">

+ 32 - 0
docs/PortalHTML/CMakeLists.txt

@@ -0,0 +1,32 @@
+################################################################################
+#    HPCC SYSTEMS software Copyright (C) 2015 HPCC Systems(r).
+#
+#    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.
+################################################################################
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*_html")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+    ENDIF()
+  ENDFOREACH()
+  SET(PORTAL_HTML_ZIP "portal_html_zip")
+  ADD_CUSTOM_TARGET(${PORTAL_HTML_ZIP} ALL
+           COMMAND zip -r "portal_html.zip" ${PORTAL_HTML_DIR}
+           WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_BUILD_TYPE}/
+           DEPENDS ${HELP_DEPENDENCIES}
+           )
+  set_property(GLOBAL APPEND PROPERTY DOC_TARGETS ${PORTAL_HTML_ZIP})
+
+ENDIF(MAKE_DOCS)

+ 11 - 0
docs/RoxieReference/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} RoxieReference.xml "RoxieReference" "RoxieRefMods" )
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*RoxieReference.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/RoxieReference.xml" ${PORTAL_HTML_DIR}/RoxieReference  "roxie_reference_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 6 - 6
docs/RoxieReference/RoxieReference.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -872,7 +872,7 @@
 
 
      <xi:include href="RoxieReference/RoxieRefMods/RoxieCapacityPlanning.xml"
-                xpointer="Capacity_Planning"
+                xpointer="xpointer(//*[@id='Capacity_Planning'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
  
 
@@ -893,7 +893,7 @@
     <emphasis>HPCC System Administrator's Guide</emphasis>.</para>
 
     <xi:include href="HPCCCertify/Cert-Mods/CertPreflight.xml"
-                xpointer="Preflight_Roxie"
+                xpointer="xpointer(//*[@id='Preflight_Roxie'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <sect1 id="Roxie_Metrics">
@@ -1006,7 +1006,7 @@
     </sect1>
 
     <xi:include href="ECLWatch/ECLWa_mods/ECLWatchQueries.xml"
-                xpointer="Queries_Page"
+                xpointer="xpointer(//*[@id='Queries_Page'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
   </chapter>
 </book>

+ 11 - 0
docs/RunningHPCCinaVirtualMachine/CMakeLists.txt

@@ -16,3 +16,14 @@
 
 DOCBOOK_TO_PDF( ${FO_XSL} RunningHPCCinaVirtualMachine.xml "RunningHPCCinaVirtualMachine")
 
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*RunningHPCCinaVirtualMachine.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/RunningHPCCinaVirtualMachine.xml" ${PORTAL_HTML_DIR}/VirtualMachine  "virtual_machine_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 3 - 3
docs/RunningHPCCinaVirtualMachine/RunningHPCCinaVirtualMachine.xml

@@ -42,15 +42,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">

+ 12 - 0
docs/UsingConfigManager/CMakeLists.txt

@@ -29,3 +29,15 @@ DOCBOOK_TO_PDF( ${FO_XSL} UsingConfigManager.xml "UsingConfigManager")
 #
 #
 ########################################################################
+
+IF(MAKE_DOCS)
+  SET(HELP_DEPENDENCIES)
+  GET_PROPERTY(Current_Targets GLOBAL PROPERTY DOC_TARGETS)
+  FOREACH(T ${Current_Targets})
+    IF("${T}" MATCHES ".*UsingConfigManager.*")
+      LIST(APPEND HELP_DEPENDENCIES  ${T})
+     ENDIF()
+  ENDFOREACH()
+
+  DOCBOOK_TO_HTML(${ECLIPSE_HTML_XSL} "${CMAKE_CURRENT_BINARY_DIR}/UsingConfigManager.xml" ${PORTAL_HTML_DIR}/UsingConfigManager  "using_configmgr_html" "${HPCC_SOURCE_DIR}/docs/common/eclipsehelp.css" "")
+ENDIF(MAKE_DOCS)

+ 36 - 36
docs/UsingConfigManager/UsingConfigManager.xml

@@ -40,15 +40,15 @@
       <para></para>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
-    <xi:include href="common/Version.xml" xpointer="DateVer"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="Copyright"
+    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
                 xmlns:xi="http://www.w3.org/2001/XInclude" />
 
     <mediaobject role="logo">
@@ -750,7 +750,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/dali.xsd.mod.xml"
-                        xpointer="da.t1"
+                        xpointer="xpointer(//*[@id='da.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -773,7 +773,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/dali.xsd.mod.xml"
-                        xpointer="da.t2"
+                        xpointer="xpointer(//*[@id='da.t2'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -793,7 +793,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/dali.xsd.mod.xml"
-                        xpointer="da.t4"
+                        xpointer="xpointer(//*[@id='da.t4'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -864,7 +864,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/dafilesrv.xsd.mod.xml"
-                        xpointer="daFs.t"
+                        xpointer="xpointer(//*[@id='daFs.t'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -912,7 +912,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/dfuserver.xsd.mod.xml"
-                        xpointer="DF.t1"
+                        xpointer="xpointer(//*[@id='DF.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -930,7 +930,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/dfuserver.xsd.mod.xml"
-                        xpointer="DF.t2"
+                        xpointer="xpointer(//*[@id='DF.t2'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1124,7 +1124,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/eclagent_config.xsd.mod.xml"
-                        xpointer="EA.t1"
+                        xpointer="xpointer(//*[@id='EA.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1142,7 +1142,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/eclagent_config.xsd.mod.xml"
-                        xpointer="EA.t2"
+                        xpointer="xpointer(//*[@id='EA.t2'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1201,7 +1201,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/eclccserver.xsd.mod.xml"
-                        xpointer="cc.t2"
+                        xpointer="xpointer(//*[@id='cc.t2'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1271,7 +1271,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/eclscheduler.xsd.mod.xml"
-                        xpointer="ecl.sched"
+                        xpointer="xpointer(//*[@id='ecl.sched'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1329,7 +1329,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp.xsd.mod.xml"
-                        xpointer="ESP.t6"
+                        xpointer="xpointer(//*[@id='ESP.t6'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1354,7 +1354,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp.xsd.mod.xml"
-                        xpointer="ESP.t1"
+                        xpointer="xpointer(//*[@id='ESP.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1365,7 +1365,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp.xsd.mod.xml"
-                        xpointer="ESP.t2"
+                        xpointer="xpointer(//*[@id='ESP.t2'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1373,7 +1373,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
             <!--MyESP-Include-ES.t3-XXX-15-->
 
             <!-- <xi:include href="XMLGeneration/xml/esp.xsd.mod.xml"
-                        xpointer="ES.t3"
+                        xpointer="xpointer(//*[@id='ES.t3'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />  -->
           </para>
 
@@ -1396,7 +1396,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp.xsd.mod.xml"
-                        xpointer="ESP.t4"
+                        xpointer="xpointer(//*[@id='ESP.t4'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1464,7 +1464,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp.xsd.mod.xml"
-                        xpointer="ESP.t5"
+                        xpointer="xpointer(//*[@id='ESP.t5'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1500,7 +1500,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/espsmcservice.xsd.mod.xml"
-                        xpointer="SMC-T01"
+                        xpointer="xpointer(//*[@id='SMC-T01'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1510,7 +1510,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/espsmcservice.xsd.mod.xml"
-                        xpointer="SMC-T02"
+                        xpointer="xpointer(//*[@id='SMC-T02'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1531,7 +1531,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp_service_wsecl2.xsd.mod.xml"
-                        xpointer="MyWS2-T01"
+                        xpointer="xpointer(//*[@id='MyWS2-T01'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1541,7 +1541,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp_service_wsecl2.xsd.mod.xml"
-                        xpointer="MyWS2-T02"
+                        xpointer="xpointer(//*[@id='MyWS2-T02'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1551,7 +1551,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/esp_service_wsecl2.xsd.mod.xml"
-                        xpointer="MyWS2-T03"
+                        xpointer="xpointer(//*[@id='MyWS2-T03'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1615,7 +1615,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/ftslave_linux.xsd.mod.xml"
-                        xpointer="FTS.t1"
+                        xpointer="xpointer(//*[@id='FTS.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1646,7 +1646,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
         <!--LdapServer-Include-fullDoc-XXX-19-->
 
         <xi:include href="XMLGeneration/xml/ldapserver.xsd.mod.xml"
-                    xpointer="ldapSrv"
+                    xpointer="xpointer(//*[@id='ldapSrv'])"
                     xmlns:xi="http://www.w3.org/2001/XInclude" />
 
         <sect3>
@@ -1725,7 +1725,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t1"
+                        xpointer="xpointer(//*[@id='sh.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1746,7 +1746,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t2"
+                        xpointer="xpointer(//*[@id='sh.t2'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
 
@@ -1767,7 +1767,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t3"
+                        xpointer="xpointer(//*[@id='sh.t3'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1788,7 +1788,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t4"
+                        xpointer="xpointer(//*[@id='sh.t4'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1811,7 +1811,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t5"
+                        xpointer="xpointer(//*[@id='sh.t5'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1832,7 +1832,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t6"
+                        xpointer="xpointer(//*[@id='sh.t6'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -1853,7 +1853,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/sasha.xsd.mod.xml"
-                        xpointer="sh.t7"
+                        xpointer="xpointer(//*[@id='sh.t7'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -2096,7 +2096,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/thor.xsd.mod.xml"
-                        xpointer="Th.t1"
+                        xpointer="xpointer(//*[@id='Th.t1'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -2116,7 +2116,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/thor.xsd.mod.xml"
-                        xpointer="Th.t3"
+                        xpointer="xpointer(//*[@id='Th.t3'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>
@@ -2142,7 +2142,7 @@ sudo -u hpcc cp /etc/HPCCSystems/source/NewEnvironment.xml /etc/HPCCSystems/envi
 
           <para>
             <xi:include href="XMLGeneration/xml/thor.xsd.mod.xml"
-                        xpointer="Th.t4"
+                        xpointer="xpointer(//*[@id='Th.t4'])"
                         xmlns:xi="http://www.w3.org/2001/XInclude" />
           </para>
         </sect3>

+ 0 - 505
docs/Visualizing/Visualizing.xml

@@ -1,505 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-<book lang="en_US" xml:base="../">
-  <title>Visualizing ECL Results</title>
-
-  <bookinfo>
-    <title>Visualizing ECL Results: Technical Preview</title>
-
-    <mediaobject>
-      <imageobject>
-        <imagedata fileref="images/redswooshWithLogo3.jpg" />
-      </imageobject>
-    </mediaobject>
-
-    <author>
-      <surname>Boca Raton Documentation Team</surname>
-    </author>
-
-    <legalnotice>
-      <para>We welcome your comments and feedback about this document via
-      email to <email>docfeedback@hpccsystems.com</email></para>
-
-      <para>Please include <emphasis role="bold">Documentation
-      Feedback</emphasis> in the subject line and reference the document name,
-      page numbers, and current Version Number in the text of the
-      message.</para>
-
-      <para>LexisNexis and the Knowledge Burst logo are registered trademarks
-      of Reed Elsevier Properties Inc., used under license.</para>
-
-      <para>HPCC Systems<superscript>®</superscript> is a registered trademark
-      of LexisNexis Risk Data Management Inc.</para>
-
-      <para>Other products, logos, and services may be trademarks or
-      registered trademarks of their respective companies.</para>
-
-      <para>All names and example data used in this manual are fictitious. Any
-      similarity to actual persons, living or dead, is purely
-      coincidental.</para>
-
-      <para />
-    </legalnotice>
-
-    <xi:include href="common/Version.xml" xpointer="FooterInfo"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-    <xi:include href="common/Version.xml" xpointer="DateVer"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-    <corpname>HPCC Systems<superscript>®</superscript></corpname>
-
-    <xi:include href="common/Version.xml" xpointer="Copyright"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-    <mediaobject role="logo">
-      <imageobject>
-        <imagedata fileref="images/LN_Rightjustified.jpg" />
-      </imageobject>
-    </mediaobject>
-  </bookinfo>
-
-  <chapter>
-    <title>Introduction</title>
-
-    <para>The ECL compiler now supports adding external resources to a
-    Workunit using a manifest file. The manifest, in XML format, adds external
-    resources such as XSLT transformations, or other objects to the archive
-    before it is compiled and deployed to the server. In future versions, you
-    should be able to add different types of resources, for example, a
-    Cascading Style Sheet (css file).</para>
-
-    <para>In the examples we provide, we will demonstrate how to use this
-    feature to visualize ECL job results using Google Chart Tools. This
-    library provides an easy way to visualize data from ECL results.</para>
-
-    <para>See <ulink
-    url="http://code.google.com/apis/chart/interactive/docs/index.html">http://code.google.com/apis/chart/interactive/docs/index.html</ulink>
-    for more information.</para>
-
-    <para />
-
-    <informaltable colsep="1" frame="all" rowsep="1">
-      <?dbfo keep-together="always"?>
-
-      <tgroup cols="2">
-        <colspec colwidth="49.50pt" />
-
-        <colspec />
-
-        <tbody>
-          <row>
-            <entry>
-              <inlinegraphic fileref="images/caution.png" />
-            </entry>
-
-            <entry>In this version of the HPCC Platform, these features are
-            being released as a technical preview. Some planned functionality
-            has not yet been implemented, but the portions that are available
-            have been tested and are ready for use.</entry>
-          </row>
-        </tbody>
-      </tgroup>
-    </informaltable>
-
-    <sect1>
-      <title>Overview of the process</title>
-
-      <para>This section is a summary of the details in this guide. After you
-      have completed the detailed steps that follow, you can use this summary
-      to refresh your memory later.</para>
-
-      <para />
-
-      <para>
-        <informaltable colsep="1" frame="all" rowsep="1">
-          <?dbfo keep-together="always"?>
-
-          <tgroup cols="2">
-            <colspec colwidth="49.50pt" />
-
-            <colspec />
-
-            <tbody>
-              <row>
-                <entry>
-                  <inlinegraphic fileref="images/tip.jpg" />
-                </entry>
-
-                <entry>We suggest <emphasis role="bold">reading</emphasis>
-                this document in its entirety before beginning.</entry>
-              </row>
-            </tbody>
-          </tgroup>
-        </informaltable>
-      </para>
-
-      <para>To use Google Charts, you should:</para>
-
-      <orderedlist numeration="arabic">
-        <listitem>
-          <para>Write ECL Code that produces an output containing data that
-          fits the visualization you select. (In this exercise, we will use
-          the ones provided in the examples.)</para>
-        </listitem>
-
-        <listitem>
-          <para>In the code, make sure your ECL OUTPUT action has the NAMED
-          option with the desired visualization nominated, as shown
-          below.</para>
-
-          <para>
-            <programlisting>OUTPUT(dPie, NAMED('PieChart_Pie_Chart_Test'));</programlisting>
-          </para>
-        </listitem>
-
-        <listitem>
-          <para>Create an XSLT template to handle the output. (In this
-          exercise, we will use the ones provided in the examples.)</para>
-        </listitem>
-
-        <listitem>
-          <para>Create a Manifest file including the XSLT template(s). (In
-          this exercise, we will use the ones provided in the examples. The
-          example XSLT files contain code that will select a visualization
-          based on the output name used in the ECL code)</para>
-        </listitem>
-
-        <listitem>
-          <para>Using either the ECL IDE or the ECLCC command line, create an
-          archive with<emphasis role="bold">-manifest=argument</emphasis>
-          naming the manifest file.</para>
-
-          <para>For example (in the IDE’s compiler arguments):</para>
-
-          <para>
-            <programlisting>-manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
-              My Files\visualizations\google_charts\files\manifest.xml"</programlisting>
-          </para>
-
-          <para>For example (on command line):</para>
-
-          <para>
-            <programlisting>eclcc pie.ecl -E -manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
-                               My Files\visualizations\google_charts\files\manifest.xml" &gt;myarchive.xml</programlisting>
-          </para>
-        </listitem>
-
-        <listitem>
-          <para>Deploy the Archive to an ESP server. This is automatic when
-          you submit using the IDE, If you used the ECLCC command line to
-          create the archive, then you must use the ECL command line tool to
-          deploy the Archive.</para>
-
-          <para>For example:</para>
-
-          <programlisting>ecl deploy myarchive.xml --server=192.168.219.8 --target=thor</programlisting>
-
-          <programlisting>ecl publish &lt;WUID&gt; --server=192.168.219.8 --target=thor --activate--name=pie</programlisting>
-
-          <para />
-        </listitem>
-
-        <listitem>
-          <para>Run the Workunit and view the Results in ECL Watch</para>
-        </listitem>
-      </orderedlist>
-    </sect1>
-
-    <sect1>
-      <title>Get the Samples</title>
-
-      <para>The collection of visualization sample files contains a set of ECL
-      files, a set of XSLT transformation templates, and a sample manifest
-      file to use to include these XSLT files into a workunit.</para>
-
-      <itemizedlist mark="bullet">
-        <listitem>
-          <para>Get the sample code from GitHub:</para>
-        </listitem>
-      </itemizedlist>
-
-      <para>
-        <ulink
-        url="https://github.com/hpcc-systems/ecl-samples/tree/master/visualizations/google_charts">https://github.com/hpcc-systems/ecl-samples/tree/master/visualizations/google_charts</ulink>
-      </para>
-
-      <itemizedlist mark="bullet">
-        <listitem>
-          <para>Click on the Zip button to download.</para>
-        </listitem>
-      </itemizedlist>
-
-      <figure>
-        <title>ZIP button</title>
-
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/viz01.jpg" />
-          </imageobject>
-        </mediaobject>
-      </figure>
-
-      <itemizedlist mark="bullet">
-        <listitem>
-          <para>Copy to the folder you use for ECL code.</para>
-        </listitem>
-      </itemizedlist>
-
-      <para />
-    </sect1>
-  </chapter>
-
-  <chapter>
-    <title>Detailed Steps Using the IDE</title>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Open the ECL IDE and Open Preferences</para>
-      </listitem>
-
-      <listitem>
-        <para>Create a new configuration pointing to the server you wish to
-        use.</para>
-      </listitem>
-
-      <listitem>
-        <para>Add the following compiler argument:</para>
-      </listitem>
-    </itemizedlist>
-
-    <programlisting>-manifest=&lt;fullpathtomanifestfile&gt;</programlisting>
-
-    <para>For example:</para>
-
-    <programlisting>-manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
-              My Files\visualizations\google_charts\files\manifest.xml"</programlisting>
-
-    <para>If the path contains spaces, you must enclose in double
-    quotes.</para>
-
-    <figure>
-      <title>manifest path</title>
-
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/viz02a.jpg" />
-        </imageobject>
-      </mediaobject>
-    </figure>
-
-    <para>NOTE: This configuration includes the manifest in every submission,
-    so only use it for ECL that needs the manifest resources (Google
-    Charts).</para>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Make sure you can see the new samples. (You may need to
-        refresh)</para>
-      </listitem>
-    </itemizedlist>
-
-    <figure>
-      <title>ECL samples</title>
-
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/viz03.jpg" />
-        </imageobject>
-      </mediaobject>
-    </figure>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Open one of the example files, for this example use pie.</para>
-      </listitem>
-
-      <listitem>
-        <para>Syntax Check the code (This is always a good idea)</para>
-      </listitem>
-
-      <listitem>
-        <para>Select <emphasis role="bold">thor</emphasis> as your target
-        cluster</para>
-      </listitem>
-
-      <listitem>
-        <para>Press the <emphasis role="bold">Submit</emphasis> button.</para>
-      </listitem>
-
-      <listitem>
-        <para>After the job completes, select the Workunit’s ECL Watch
-        view:</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>
-      <figure>
-        <title>ECL Watch view</title>
-
-        <mediaobject>
-          <imageobject>
-            <imagedata fileref="images/viz04.jpg" />
-          </imageobject>
-        </mediaobject>
-      </figure>
-    </para>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Scroll down, and expand the Result section.</para>
-      </listitem>
-
-      <listitem>
-        <para>Click on the <emphasis role="bold">Google Chart by
-        Name</emphasis> link</para>
-
-        <para>The visualization displays</para>
-      </listitem>
-    </itemizedlist>
-
-    <para />
-
-    <figure>
-      <title>visualization chart</title>
-
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/viz05.jpg" />
-        </imageobject>
-      </mediaobject>
-    </figure>
-  </chapter>
-
-  <chapter>
-    <title>Detailed Steps using the command line tools</title>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Open a command window in the location of your ECL files.</para>
-      </listitem>
-
-      <listitem>
-        <para>Type the following command:</para>
-      </listitem>
-    </itemizedlist>
-
-    <programlisting>eclcc pie.ecl -E -manifest=&lt;mainfestfilepath&gt; &gt;myarchive.xml</programlisting>
-
-    <para>
-      <emphasis>where &lt;manifestfilepath&gt; is the location of your
-      manifest file</emphasis>
-    </para>
-
-    <para>For example:</para>
-
-    <programlisting>eclcc pie.ecl -E -manifest="C:\Documents and Settings\All Users\Documents\HPCC Systems\ECL\
-                    My Files\visualizations\google_charts\files\manifest.xml" &gt;myarchive.xml</programlisting>
-
-    <para />
-
-    <para>This invokes the ECLCC compiler to create an archive named
-    myarchive.xml.</para>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Type the following command:</para>
-      </listitem>
-    </itemizedlist>
-
-    <programlisting>ecl deploy myarchive.xml --server=10.239.219.8 --target=thor</programlisting>
-
-    <para>
-      <emphasis>where --server= is the IP address of your ESP server
-      and</emphasis>
-
-      <emphasis>--target= is the target cluster name.</emphasis>
-    </para>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>Take note of the WUID returned by the pervious command.</para>
-      </listitem>
-
-      <listitem>
-        <para>Type the following command:</para>
-      </listitem>
-    </itemizedlist>
-
-    <programlisting>ecl publish &lt;WUID&gt; --server=10.239.219.8 --target=thor --activate --name=pie</programlisting>
-
-    <para>
-      <emphasis>where &lt;WUID&gt; is the workuint id number, --server= is the
-      IP address of your ESP server, and --target= is the target cluster
-      name.</emphasis>
-    </para>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>In a browser, open the URL for the WsECL service (typically
-        found on port 8002 of your ESP Server).</para>
-      </listitem>
-
-      <listitem>
-        <para>Expand the <emphasis role="bold">thor</emphasis> branch on the
-        left, then click on the <emphasis role="bold">pie</emphasis> service
-        link.</para>
-      </listitem>
-
-      <listitem>
-        <para>Press the Submit button.</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>The visualization displays.</para>
-
-    <figure>
-      <title>visualization</title>
-
-      <mediaobject>
-        <imageobject>
-          <imagedata fileref="images/viz06.jpg" />
-        </imageobject>
-      </mediaobject>
-    </figure>
-  </chapter>
-
-  <chapter>
-    <title>Next Steps</title>
-
-    <para>Try the remaining examples:</para>
-
-    <itemizedlist mark="bullet">
-      <listitem>
-        <para>geomap</para>
-      </listitem>
-
-      <listitem>
-        <para>motion</para>
-      </listitem>
-
-      <listitem>
-        <para>pie</para>
-      </listitem>
-
-      <listitem>
-        <para>scatter</para>
-      </listitem>
-
-      <listitem>
-        <para>sparkline</para>
-      </listitem>
-
-      <listitem>
-        <para>timeline</para>
-      </listitem>
-    </itemizedlist>
-
-    <para>Try creating your own XSLT files and Manifest to use other Google
-    Charts.</para>
-
-    <para>Try creating your own XSLT files and Manifest to use other
-    third-party visualizations.</para>
-  </chapter>
-</book>

+ 19 - 0
docs/VisualizingECL/CMakeLists.txt

@@ -0,0 +1,19 @@
+################################################################################
+#    HPCC SYSTEMS software Copyright (C) 2017 HPCC Systems(r).
+#
+#    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.
+################################################################################
+
+
+
+DOCBOOK_TO_PDF( ${FO_XSL} Visualizing_Includer.xml "VisualizingECL" "VizMods")

+ 78 - 0
docs/VisualizingECL/Visualizing_Includer.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<book lang="en_US" xml:base="../">
+  <bookinfo>
+    <title>Visualizing ECL Results</title>
+
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+      </imageobject>
+    </mediaobject>
+
+    <author>
+      <surname>Boca Raton Documentation Team</surname>
+    </author>
+
+    <legalnotice>
+      <para>We welcome your comments and feedback about this document via
+      email to <email>docfeedback@hpccsystems.com</email></para>
+
+      <para>Please include <emphasis role="bold">Documentation
+      Feedback</emphasis> in the subject line and reference the document name,
+      page numbers, and current Version Number in the text of the
+      message.</para>
+
+      <para>LexisNexis and the Knowledge Burst logo are registered trademarks
+      of Reed Elsevier Properties Inc., used under license.</para>
+
+      <para>HPCC Systems<superscript>®</superscript> is a registered trademark
+      of LexisNexis Risk Data Management Inc.</para>
+
+      <para>Other products, logos, and services may be trademarks or
+      registered trademarks of their respective companies.</para>
+
+      <para>All names and example data used in this manual are fictitious. Any
+      similarity to actual persons, living or dead, is purely
+      coincidental.</para>
+
+      <para></para>
+    </legalnotice>
+
+    <xi:include href="common/Version.xml" xpointer="FooterInfo"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <xi:include href="common/Version.xml" xpointer="DateVer"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <corpname>HPCC Systems<superscript>®</superscript></corpname>
+
+    <xi:include href="common/Version.xml" xpointer="Copyright"
+                xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+    <mediaobject role="logo">
+      <imageobject>
+        <imagedata fileref="images/LN_Rightjustified.jpg" />
+      </imageobject>
+    </mediaobject>
+  </bookinfo>
+
+  <xi:include href="VisualizingECL/VizMods/VizIntro.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="VisualizingECL/VizMods/Methods.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="VisualizingECL/VizMods/TwoD.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="VisualizingECL/VizMods/MultiD.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="VisualizingECL/VizMods/Choropleth.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+
+  <xi:include href="VisualizingECL/VizMods/Any.xml"
+              xmlns:xi="http://www.w3.org/2001/XInclude" />
+</book>

+ 111 - 0
docs/VisualizingECL/VizMods/2d.xml

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizBundleChart2dMethods">
+  <title><emphasis>Two-Dimensional Methods</emphasis></title>
+
+  <para>This section covers methods that create two-dimensional visualizations
+  contained in the TwoD module.</para>
+
+  <para>***more to come**</para>
+
+  <sect1 id="Apply2Cells">
+    <title>Bubble</title>
+
+    <para><emphasis role="bold">Visualization.TwoD.Chart2D.Bubble(<indexterm>
+        <primary>Visualization.TwoD.Bubble</primary>
+      </indexterm><indexterm>
+        <primary>TwoD.Bubble</primary>
+      </indexterm><indexterm>
+        <primary>Bubble</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See Dermatology
+            Properties***todo***</entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization. See
+            Common/Meta***todo***</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Bubble </emphasis>visualization method
+    creates a bubble chart from two-dimensional data. A bubble chart is a
+    variation of a scatter chart where data points are replaced with bubbles
+    and the size of the bubble is represented by a dimension of the
+    data.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualization;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_bubble := Visualization.TwoD.Bubble('bubble',, 'Chart2D__test');
+viz_bubble;
+</programlisting>
+  </sect1>
+</chapter>

+ 204 - 0
docs/VisualizingECL/VizMods/Any.xml

@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizBundleGeneralMethods">
+  <title><emphasis>General Visualization Methods</emphasis></title>
+
+  <para>This section covers methods that create generic visualizations
+  contained in the Any module. These visualizations are handy for testing and
+  examining your data source.</para>
+
+  <para></para>
+
+  <sect1 id="VizGrid">
+    <title>Grid</title>
+
+    <para><emphasis role="bold">Visualizer.Any.Grid(<indexterm>
+        <primary>Visualizer.Any.Grid</primary>
+      </indexterm><indexterm>
+        <primary>Any.Grid</primary>
+      </indexterm><indexterm>
+        <primary>Grid</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Grid </emphasis>visualization method
+    creates a simple table or grid from any data.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_Grid := Visualizer.Any.Grid('Grid',, 'Chart2D__test');
+viz_Grid;
+</programlisting>
+  </sect1>
+
+  <sect1 id="VizHandsonGrid">
+    <title>HandsonGrid</title>
+
+    <para><emphasis role="bold">Visualizer.Any.HandsonGrid(<indexterm>
+        <primary>Visualizer.Any.HandsonGrid</primary>
+      </indexterm><indexterm>
+        <primary>Any.HandsonGrid</primary>
+      </indexterm><indexterm>
+        <primary>HandsonGrid</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">HandsonGrid </emphasis>visualization
+    method creates a hands on table or grid from any data.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_HandsonGrid := Visualizer.Any.HandsonGrid('HandsonGrid',, 'Chart2D__test');
+viz_HandsonGrid;
+</programlisting>
+  </sect1>
+</chapter>

+ 303 - 0
docs/VisualizingECL/VizMods/Choropleth.xml

@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizBundleGeospatialMethods">
+  <title><emphasis>Geospatial Methods</emphasis></title>
+
+  <para>This section covers the Geospatial methods that create geographical
+  map visualizations contained in the Choropleth module. These methods project
+  data onto maps using shading to depict values.</para>
+
+  <para></para>
+
+  <sect1 id="VizUSStates">
+    <title>USStates</title>
+
+    <para><emphasis role="bold">Visualizer.Choropleth.USStates(<indexterm>
+        <primary>Visualizer.Choropleth.USStates</primary>
+      </indexterm><indexterm>
+        <primary>Choropleth.USStates</primary>
+      </indexterm><indexterm>
+        <primary>USStates</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">USStates </emphasis>visualization method
+    depicts data on a map of U.S. States.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+  _usStates := DATASET([  {'AL', 4779736}, 
+                         {'AK', 710231}, 
+                         {'AZ', 6392017}, 
+                         {'AR', 2915918}],
+                         {STRING State, INTEGER4 weight});
+  data_usStates := OUTPUT(_usStates, NAMED('choro_usStates'));
+  data_usStates;
+  viz_usstates := Visualizer.Choropleth.USStates('usStates',, 'choro_usStates');
+  viz_usstates;
+</programlisting>
+  </sect1>
+
+  <sect1 id="VizUSCounties">
+    <title>USCounties</title>
+
+    <para><emphasis role="bold">Visualizer.Choropleth.USCounties(<indexterm>
+        <primary>Visualizer.Choropleth.USCounties</primary>
+      </indexterm><indexterm>
+        <primary>Choropleth.USCounties</primary>
+      </indexterm><indexterm>
+        <primary>USCounties</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">USCounties </emphasis>visualization method
+    depicts data on a map of U.S. counties.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+
+  _usCounties := DATASET([    {1073,29.946185501741},
+                                        {1097,0.79566003616637},
+                                        {1117,1.5223596574691},
+                                        {4005,27.311773623042}],
+                                        {STRING FIPS, INTEGER4 weight});
+
+  data_usCounties := OUTPUT(_usCounties, NAMED('choro_usCounties'));
+  data_usCounties;
+  viz_uscounties := Visualizer.Choropleth.USCounties('usCounties',, 'choro_usCounties');
+  viz_uscounties;
+</programlisting>
+  </sect1>
+
+  <sect1 id="VizEuro">
+    <title>Euro</title>
+
+    <para><emphasis role="bold">Visualizer.Choropleth.Euro(<indexterm>
+        <primary>Visualizer.Choropleth.Euro</primary>
+      </indexterm><indexterm>
+        <primary>Choropleth.Euro</primary>
+      </indexterm><indexterm>
+        <primary>Euro</primary>
+      </indexterm><indexterm>
+        <primary>EuroGB</primary>
+      </indexterm><indexterm>
+        <primary>EuroIE</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> ,<emphasis
+    role="bold">[</emphasis><emphasis>region</emphasis><emphasis
+    role="bold">]</emphasis> <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>region</emphasis></entry>
+
+            <entry>2 Letter European Code (GB, IE, etc.)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Euro </emphasis>visualization method
+    depicts data on a map of Europe. The <emphasis
+    role="bold">EuroIE</emphasis> and <emphasis role="bold">EuroGB</emphasis>
+    methods are provided as examples. To create other country-specific
+    methods, merely use the Euro method and provide the two-character country
+    code in the _region parameter.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+_euroIE := DATASET([    {'Carlow', '27431', '27181', '54612'}, 
+                                    {'Dublin City', '257303', '270309', '527612'}, 
+                                    {'Kilkenny', '47788', '47631', '95419'}, 
+                                    {'Cork', '198658', '201144', '399802'}],
+                                    {STRING region, INTEGER4 males, INTEGER4 females, INTEGER4 total});
+  data_euroIE := OUTPUT(_euroIE, NAMED('choro_euroIE'));
+  data_euroIE;
+  
+  viz_euroIE := Visualizer.Choropleth.EuroIE('euroIE',, 'choro_euroIE', DATASET([{'County', 'region'}, {'Population', 'total'}], Visualizer.KeyValueDef),, DATASET([{'paletteID', 'Greens'}], Visualizer.KeyValueDef));
+  viz_euroIE;</programlisting>
+  </sect1>
+</chapter>

+ 89 - 0
docs/VisualizingECL/VizMods/Methods.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizMethods">
+  <title><emphasis>Methods</emphasis></title>
+
+  <para>Methods are categorized by the shape of the data they support. The
+  categories are:</para>
+
+  <para><link linkend="VizTwoD">Two-Dimensional</link></para>
+
+  <para><link linkend="VizNDList">Multi-Dimensional</link></para>
+
+  <para><link linkend="VizGeoList">Geospatial</link></para>
+
+  <para><link linkend="VizGeneralList">General</link></para>
+
+  <para></para>
+
+  <sect1 id="Viz2dlistl">
+    <title>Two-Dimensional Visualization Methods</title>
+
+    <para>This MODULE contains a selection of visualizations for
+    two-dimensional data.</para>
+
+    <para><link linkend="VizBubble">Bubble</link></para>
+
+    <para><link linkend="VizPie">Pie</link></para>
+
+    <para><link linkend="VizSummary">Summary</link></para>
+
+    <para><link linkend="VizWordCloud">WordCloud</link></para>
+  </sect1>
+
+  <sect1 id="VizNDList">
+    <title>Multi-Dimensional Visualization Methods</title>
+
+    <para>This MODULE contains a selection of visualizations for
+    multi-dimensional data.</para>
+
+    <para><link linkend="VizMultiDArea">Area</link></para>
+
+    <para><link linkend="VizMultiDBar">Bar</link></para>
+
+    <para><link linkend="VizMultiDColumn">Column</link></para>
+
+    <para><link linkend="VizMultiDHexBin">HexBin</link></para>
+
+    <para><link linkend="VizMultiDLine">Line</link></para>
+
+    <para><link linkend="VizMultiDScatter">Scatter</link></para>
+
+    <para><link linkend="VizMultiDStep">Step</link></para>
+
+    <para></para>
+  </sect1>
+
+  <sect1 id="VizGeoList">
+    <title>Geospatial Visualization Methods</title>
+
+    <para><link linkend="VizUSStates">USStates</link></para>
+
+    <para><link linkend="VizUSCounties">USCounties</link></para>
+
+    <para><link linkend="VizEuro">Euro</link></para>
+
+    <para>EuroIE</para>
+
+    <para>EuroGB</para>
+
+    <para></para>
+
+    <para>Note: The EuroIE and EuroGB methods are provided as examples. To
+    create other country-specific methods, merely use the Euro method and
+    provide the two-character country code in the _region parameter.</para>
+  </sect1>
+
+  <sect1 id="VizGeneralList">
+    <title>General Visualization Methods</title>
+
+    <para><link linkend="VizGrid">Grid</link></para>
+
+    <para><link linkend="VizHandsonGrid">Handson Grid</link></para>
+
+    <para></para>
+
+    <para></para>
+  </sect1>
+</chapter>

+ 690 - 0
docs/VisualizingECL/VizMods/MultiD.xml

@@ -0,0 +1,690 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizBundleChart2dMethods">
+  <title><emphasis>Multi-Dimensional Methods</emphasis></title>
+
+  <para>This section covers methods that create multi-dimensional
+  visualizations contained in the MultiD module. These methods provide ways to
+  depict data in a multi-dimensional space.</para>
+
+  <para></para>
+
+  <sect1 id="VizMultiDArea">
+    <title>Area</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.Area(<indexterm>
+        <primary>Visualizer.MultiD.Area</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.Area</primary>
+      </indexterm><indexterm>
+        <primary>Area</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Area </emphasis>visualization method
+    displays graphically quantitative data. The area between the axis and each
+    line is shown and can be emphasized using shading or colors. This is
+    commonly used to compare two or more quantities.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  
+  viz_area := Visualizer.MultiD.Area('area',, 'MultiD__test');
+  Viz_area;</programlisting>
+  </sect1>
+
+  <sect1 id="VizMultiDBar">
+    <title>Bar</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.Bar(<indexterm>
+        <primary>Visualizer.MultiD.Bar</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.Bar</primary>
+      </indexterm><indexterm>
+        <primary>Bar</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Bar </emphasis>visualization method
+    displays a graph consisting of horizontal rectangles (bars) where each
+    length is proportional to data value.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  
+  viz_bar := Visualizer.MultiD.Bar('bar',, 'MultiD__test');
+  viz_bar;</programlisting>
+  </sect1>
+
+  <sect1 id="VizMultiDColumn">
+    <title>Column</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.Column(<indexterm>
+        <primary>Visualizer.MultiD.Column</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.Column</primary>
+      </indexterm><indexterm>
+        <primary>Column</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Column </emphasis>visualization method
+    displays a graph consisting of vertical rectangles (bars) where each
+    length is proportional to data value.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  
+  viz_Column := Visualizer.MultiD.Column('column',, 'MultiD__test');
+  viz_Column;</programlisting>
+  </sect1>
+
+  <sect1 id="VizMultiDHexBin">
+    <title>HexBin</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.HexBin(<indexterm>
+        <primary>Visualizer.MultiD.HexBin</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.HexBin</primary>
+      </indexterm><indexterm>
+        <primary>HexBin</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">HexBin </emphasis>visualization method
+    displays a Hexagonal Bin plot which plots two or more continuous variables
+    against each other. Hexagonal binning is useful for aggregating data
+    values into a coarser display. For example, rather than showing thousands
+    of points on a scatter plot, you can combine points into a few hexagons to
+    show the distribution.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  
+  viz_hexBin := Visualizer.MultiD.HexBin('hexBin',, 'MultiD__test');
+  viz_hexBin;</programlisting>
+  </sect1>
+
+  <sect1 id="VizMultiDLine">
+    <title>Line</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.Line(<indexterm>
+        <primary>Visualizer.MultiD.Line</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.Line</primary>
+      </indexterm><indexterm>
+        <primary>Line</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Line </emphasis>visualization method
+    displays a line graph which uses points connected by lines to show how
+    values change.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  
+  viz_line := Visualizer.MultiD.Line('line',, 'MultiD__test');
+  viz_line;</programlisting>
+  </sect1>
+
+  <sect1 id="VizMultiDScatter">
+    <title>Scatter</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.Scatter(<indexterm>
+        <primary>Visualizer.MultiD.Scatter</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.Scatter</primary>
+      </indexterm><indexterm>
+        <primary>Scatter</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Scatter </emphasis>visualization method
+    displays a scatter plot using horizontal and vertical axes to plot data
+    points.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  viz_scatter := Visualizer.MultiD.Scatter('scatter',, 'MultiD__test');
+  viz_scatter;
+
+  </programlisting>
+  </sect1>
+
+  <sect1 id="VizMultiDStep">
+    <title>Step</title>
+
+    <para><emphasis role="bold">Visualizer.MuiltD.Step(<indexterm>
+        <primary>Visualizer.MultiD.Step</primary>
+      </indexterm><indexterm>
+        <primary>MultiD.Step</primary>
+      </indexterm><indexterm>
+        <primary>Step</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis>.<emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie Query
+            result), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps Column Name &lt;--&gt; field ID</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry> Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Step </emphasis>visualization method
+    creates a step graph made of lines in horizontal intervals or
+    'steps'.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;                  
+  ds := DATASET([ {'English', 5, 43, 41, 92},
+                  {'History', 17, 43, 83, 93},
+                  {'Geography', 7, 45, 52, 83},
+                  {'Chemistry', 16, 73, 52, 83},
+                  {'Spanish', 26, 83, 11, 72},
+                  {'Bioligy', 66, 60, 85, 6},
+                  {'Physics', 46, 20, 53, 7},
+                  {'Math', 98, 30, 23, 13}],
+                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
+  data_exams := OUTPUT(ds, NAMED('MultiD__test'));
+  data_exams;
+  viz_step := Visualizer.MultiD.Step('step',, 'MultiD__test');
+  viz_step;
+
+  </programlisting>
+  </sect1>
+</chapter>

+ 409 - 0
docs/VisualizingECL/VizMods/TwoD.xml

@@ -0,0 +1,409 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizTwoD">
+  <title><emphasis>Two-Dimensional Methods</emphasis></title>
+
+  <para>This section covers methods that create two-dimensional visualizations
+  contained in the TwoD module. These methods provide ways to depict data in a
+  two-dimensional space.</para>
+
+  <para></para>
+
+  <sect1 id="VizBubble">
+    <title>Bubble</title>
+
+    <para><emphasis role="bold">Visualizer.TwoD.Bubble(<indexterm>
+        <primary>Visualizer.TwoD.Bubble</primary>
+      </indexterm><indexterm>
+        <primary>TwoD.Bubble</primary>
+      </indexterm><indexterm>
+        <primary>Bubble</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis><emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>filteredBy</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie
+            query), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps human labels &lt;--&gt; field Ids</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Bubble </emphasis>visualization method
+    creates a bubble chart from two-dimensional data. A bubble chart is a
+    variation of a pie chart where data points are shown as bubbles and the
+    size of the bubble is represented by the second dimension of the
+    data.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_bubble := Visualizer.TwoD.Bubble('bubble',, 'Chart2D__test');
+viz_bubble;
+</programlisting>
+  </sect1>
+
+  <sect1 id="VizPie">
+    <title>Pie</title>
+
+    <para><emphasis role="bold">Visualizer.TwoD.Pie(<indexterm>
+        <primary>Visualizer.TwoD.Pie</primary>
+      </indexterm><indexterm>
+        <primary>TwoD.Pie</primary>
+      </indexterm><indexterm>
+        <primary>Pie</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis><emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>filteredBy</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie
+            query), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps human labels &lt;--&gt; field Ids</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Pie </emphasis>visualization method
+    creates a pie chart from two-dimensional data. A pie chart is a graph in
+    which a circle is divided into secions representing a portion of the
+    whole.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_pie := Visualizer.TwoD.Pie('pie',, 'Chart2D__test');
+viz_pie;
+</programlisting>
+  </sect1>
+
+  <sect1 id="VizSummary">
+    <title>Summary</title>
+
+    <para><emphasis role="bold">Visualizer.TwoD.Summary(<indexterm>
+        <primary>Visualizer.TwoD.Summary</primary>
+      </indexterm><indexterm>
+        <primary>TwoD.Summary</primary>
+      </indexterm><indexterm>
+        <primary>Summary</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis><emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>filteredBy</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie
+            query), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps human labels &lt;--&gt; field Ids</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">Summary </emphasis>visualization method
+    creates a summary chart from two-dimensional data. The summary graph
+    defaults to graphic showing scrolling data values.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_Summary := Visualizer.TwoD.Summary('Summary',, 'Chart2D__test');
+viz_Summary;
+</programlisting>
+  </sect1>
+
+  <sect1 id="VizWordCloud">
+    <title>WordCloud</title>
+
+    <para><emphasis role="bold">Visualizer.TwoD.WordCloud(<indexterm>
+        <primary>Visualizer.TwoD.WordCloud</primary>
+      </indexterm><indexterm>
+        <primary>TwoD.WordCloud</primary>
+      </indexterm><indexterm>
+        <primary>WordCloud</primary>
+      </indexterm>(</emphasis> <emphasis>id</emphasis> , <emphasis
+    role="bold">[</emphasis><emphasis>dataSource</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>outputName</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>filteredBy</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>mappings</emphasis><emphasis
+    role="bold">], [</emphasis><emphasis>properties</emphasis><emphasis
+    role="bold">]);</emphasis></para>
+
+    <para></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="80.50pt" />
+
+        <colspec />
+
+        <tbody>
+          <row>
+            <entry><emphasis>id</emphasis></entry>
+
+            <entry>Unique identifier for the visualization</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>dataSource</emphasis></entry>
+
+            <entry>Location of the result set (WUID, Logical File, Roxie
+            query), defaults to the current WU</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>outputName</emphasis></entry>
+
+            <entry>Result set name (ignored for Logical Files)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>mappings</emphasis></entry>
+
+            <entry>Maps human labels &lt;--&gt; field Ids</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>filteredBy</emphasis></entry>
+
+            <entry>Filter condition (also useful for widget
+            interactions)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>properties</emphasis></entry>
+
+            <entry>Dermatology properties. See <link
+            linkend="VizDermProp">Dermatology Properties</link></entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis></emphasis></entry>
+
+            <entry>A "meta" output describing the visualization.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>The <emphasis role="bold">WordCloud </emphasis>visualization method
+    creates a word cloud chart from two-dimensional data. A WordCloud is
+    weighted word list in visual design. It is a visual representation for
+    text data, typically used to depict the weight or importance of words by
+    the font size or color.</para>
+
+    <para>Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_WordCloud := Visualizer.TwoD.WordCloud('WordCloud',, 'Chart2D__test');
+viz_WordCloud;
+</programlisting>
+  </sect1>
+</chapter>

+ 163 - 0
docs/VisualizingECL/VizMods/VizIntro.xml

@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<chapter id="VizIntro">
+  <title><emphasis>Visualization Introduction</emphasis></title>
+
+  <para>The Visualization bundle is an open-source add-on to the HPCC platform
+  to allow you to create visualizations from the results of queries written in
+  ECL.</para>
+
+  <para>Visualizations are an important means of conveying information from
+  massive data. A good visual representation can help a human produce
+  actionable analysis. A visually comprehensive representation of the
+  information can help make the obscure more obvious.</para>
+
+  <para>Pie Charts, Line graphs, Maps, and other visual graphs help us
+  understand the answers found in data queries. Crunching big data is only
+  part of a solution; we must be able to make sense of the data, too. Data
+  visualizations simplify the complex.</para>
+
+  <para>The Visualizer bundle extends the HPCC platform's functionality by
+  allowing you to plot your data onto charts, graphs, and maps to add a visual
+  representation that can be easily understood.</para>
+
+  <para>In addition, the underlying visualization framework supports advanced
+  features to allow you to combine graphs to make interactive
+  dashboards.</para>
+
+  <sect1 id="VizInstall">
+    <title>Installation</title>
+
+    <para>To install the Visualization bundle, use the ecl command line
+    interface.</para>
+
+    <para></para>
+
+    <para><programlisting>ecl bundle install https://github.com/hpcc-systems/Visualizer.git</programlisting></para>
+
+    <para>To use the "ecl bundle install &lt;git url&gt;" command, you must
+    have git installed and configured on your system. Git must be accessible
+    to the user (in the path).</para>
+
+    <para></para>
+  </sect1>
+
+  <sect1 id="VizUsing">
+    <title>Using the Visualization library</title>
+
+    <para>Once installed, you merely IMPORT the library, then call any method
+    that is appropriate for your data shape.</para>
+
+    <para>Creating a basic visualization typically requires the following
+    steps:</para>
+
+    <para><orderedlist>
+        <listitem>
+          <para>Creation of a suitable dataset.</para>
+        </listitem>
+
+        <listitem>
+          <para>Output the dataset with a suitable name, so that visualization
+          can locate the data.</para>
+        </listitem>
+
+        <listitem>
+          <para>Create (and output) a the visualization, referencing the named
+          output from step 2.</para>
+        </listitem>
+      </orderedlist></para>
+
+    <para>To change the appearance of the visualization, dermatology
+    properties can be provided while creating the visualization or can be
+    applied at runtime via the live dermatology property editor.</para>
+
+    <para>For Example:</para>
+
+    <programlisting format="linespecific">IMPORT Visualizer;
+ds := DATASET([ {'English', 5},
+                {'History', 17},
+                {'Geography', 7},
+                {'Chemistry', 16},
+                {'Irish', 26},
+                {'Spanish', 67},
+                {'Bioligy', 66},
+                {'Physics', 46},
+                {'Math', 98}],
+                {STRING subject, INTEGER4 year});
+data_example := OUTPUT(ds, NAMED('Chart2D__test'));
+data_example;
+viz_bubble := Visualizer.TwoD.Bubble('bubble',, 'Chart2D__test');
+viz_bubble;
+</programlisting>
+
+    <para>This code creates a Bubble chart as shown below:</para>
+
+    <graphic fileref="../../images/viz10.jpg" />
+
+    <para></para>
+
+    <para>See <link linkend="VizMethods">Methods</link> for details about the
+    categories of visualization methods and all available methods.</para>
+  </sect1>
+
+  <sect1 id="VizViewing">
+    <title>Viewing the Visualization</title>
+
+    <para>After running a query with a visualization included, you can see the
+    visualization in ECL Watch. Visualizations are appended to the workunit as
+    additional <emphasis>resources</emphasis> and can be viewed from the
+    <emphasis role="bold">Resources</emphasis> tab on the Workunit Details
+    page.</para>
+
+    <para>Open the workunit, then select the <emphasis
+    role="bold">Resources</emphasis> tab.</para>
+
+    <para><graphic fileref="../../images/viz07.jpg" /></para>
+  </sect1>
+
+  <sect1 id="VizDermProp">
+    <title>Dermatology Properties</title>
+
+    <para>The dermatology layer provides a means of setting properties for the
+    manner in which a visualization appears. For example, you can change the
+    palletteID to a new color scheme. After running a query with a
+    visualization included, it can be viewed within ECL Watch.</para>
+
+    <para>The <emphasis role="bold">Dermatology Editor</emphasis> lets you
+    alter the appearance of the visualization after it has been executed. The
+    same properties can also be specified in the ECL when creating the
+    visualization.</para>
+
+    <para>You can set properties in your ECL code or afterwards in ECL
+    Watch:</para>
+
+    <orderedlist>
+      <listitem>
+        <para>Open the workunit, then select the <emphasis
+        role="bold">Resources</emphasis> tab.</para>
+      </listitem>
+
+      <listitem>
+        <para>Press the <emphasis role="bold">Properties</emphasis>
+        button.</para>
+
+        <graphic fileref="../../images/viz08.jpg" />
+      </listitem>
+
+      <listitem>
+        <para>Edit Properties as desired. <emphasis
+        role="bold"></emphasis></para>
+
+        <para><graphic fileref="../../images/viz09.jpg" /></para>
+      </listitem>
+
+      <listitem>
+        <para>Press the <emphasis role="bold">Save</emphasis> button.<emphasis
+        role="bold"></emphasis></para>
+      </listitem>
+    </orderedlist>
+
+    <para></para>
+  </sect1>
+</chapter>

二进制
docs/images/viz07.jpg


二进制
docs/images/viz08.jpg


二进制
docs/images/viz09.jpg


二进制
docs/images/viz10.jpg


+ 25 - 2
ecl/hql/hqlexpr.cpp

@@ -4222,8 +4222,13 @@ void CHqlRealExpression::updateFlagsAfterOperands()
             break;
         }
     case no_clustersize:
-        //wrong, but improves the generated code
-        infoFlags |= (HEFnoduplicate|HEFcontextDependentException);
+        //pure is added with the wfid as a parameter which guarantees that it can be commoned up.
+        if (!hasAttribute(pureAtom))
+            infoFlags |= (HEFnoduplicate);
+
+        //Wrong, but improves the generated code (preventing it being serialized).
+        //Even better would be to evaluate once, but not serialize...
+        infoFlags |= (HEFcontextDependentException);
         break;
     case no_type:
         {
@@ -13816,6 +13821,24 @@ unsigned exportField(IPropertyTree *table, IHqlExpression *field, unsigned & off
             thisSize = exportRecord(f, record, flatten);
     }
     f->setPropInt("@size", thisSize);
+
+    StringBuffer userOptions;
+    ForEachChild(i, field)
+    {
+        IHqlExpression * attr = field->queryChild(i);
+        if (attr->isAttribute() && (attr->queryName() == setAtom))
+        {
+            ForEachChild(i2, attr)
+            {
+                if (userOptions.length())
+                    userOptions.append(",");
+                getExprECL(attr->queryChild(i2), userOptions);
+            }
+        }
+    }
+    if (userOptions.length())
+        f->setProp("@options", userOptions.str());
+
     return thisSize;
 }
 

+ 36 - 8
ecl/hql/hqlfold.cpp

@@ -3233,7 +3233,7 @@ IHqlExpression * foldConstantOperator(IHqlExpression * expr, unsigned foldOption
                     //MORE: Not sure if this is a good idea because it loses commonality between attributes.
                     // (T1)((T2)(X:T3))
                     // Can remove the cast to T2 if T3->T2 doesn't lose any information, 
-                    // and if the convertion from T2->T1 produces same results as converting T3->T1
+                    // and if the conversion from T2->T1 produces same results as converting T3->T1
                     // (For the moment only assume this is true if target is numeric)
                     // could possibly remove if T3-T2 and T2->T1 lose information, but they might 
                     // lose different information
@@ -3248,9 +3248,9 @@ IHqlExpression * foldConstantOperator(IHqlExpression * expr, unsigned foldOption
                         if (isNumericType(e_type))
                             sameResults = true;
                         else if (isStringOrUnicode(e_type) && isStringOrUnicode(c_type) && isStringOrUnicode(g_type))
-                            sameResults = true;         
+                            sameResults = true;
                         
-                        // Don't allow casts involving data and non-ascii datasets because it can cause ascii convertions to get lost
+                        // Don't allow casts involving data and non-ascii datasets because it can cause ascii conversions to get lost
                         if (castHidesConversion(e_type, c_type, g_type) ||
                             castHidesConversion(c_type, e_type, g_type) ||
                             castHidesConversion(g_type, c_type, e_type))
@@ -3260,7 +3260,20 @@ IHqlExpression * foldConstantOperator(IHqlExpression * expr, unsigned foldOption
                         {
                             if (e_type == g_type)
                                 return LINK(grand);
-                            return createValue(op, LINK(e_type), LINK(grand));
+
+                            if (isUnknownSize(e_type))
+                            {
+                                //(string)(string200)string50  => (string200)string50
+                                if ((e_type->getTypeCode() == c_type->getTypeCode()) &&
+                                    (e_type->queryCharset() == c_type->queryCharset()))
+                                    return LINK(child);
+
+                                //(string)(ebcdic20)string50 => (string20)string50
+                                ITypeInfo * shrunkType = getStretchedType(c_type->getStringLen(), e_type);
+                                return createValue(op, shrunkType, LINK(grand));
+                            }
+                            else
+                                return createValue(op, LINK(e_type), LINK(grand));
                         }
                     }
                     break;
@@ -6548,12 +6561,11 @@ HqlConstantPercolator * CExprFolderTransformer::gatherConstants(IHqlExpression *
             break;
         }
 
-    //The following get the values purely from the assocated transform - if it contains constant entires
+    //The following get the values purely from the associated transform - if it contains constant entires
     case no_xmlproject:
     case no_combine:
     case no_combinegroup:
     case no_process:
-    case no_denormalize:
     case no_denormalizegroup:
     case no_fetch:
     case no_join:
@@ -6692,8 +6704,24 @@ HqlConstantPercolator * CExprFolderTransformer::gatherConstants(IHqlExpression *
     case no_catch:
         //all bets are off.
         break;
-
-
+    case no_denormalize:
+        {
+            HqlConstantPercolator * leftMapping = gatherConstants(expr->queryChild(0));
+            IHqlExpression * transform = queryNewColumnProvider(expr);
+            exprMapping.setown(HqlConstantPercolator::extractConstantMapping(transform));
+            if (exprMapping)
+            {
+                if (leftMapping)
+                {
+                    exprMapping->intersectMapping(leftMapping);
+                    if (exprMapping->empty())
+                        exprMapping.clear();
+                }
+                else
+                    exprMapping.clear();
+            }
+            break;
+        }
     case no_selectnth:
         {
             //Careful - this can create a null row if it is out of range.

+ 8 - 0
ecl/hql/hqlgram.y

@@ -4751,6 +4751,14 @@ fieldAttr
                             $$.setExpr(getEmbeddedAttr());
                             $$.setPosition($1);
                         }
+    | SET '(' hintList ')'
+                        {
+                            HqlExprArray args;
+                            $3.unwindCommaList(args);
+                            $$.setExpr(createExprAttribute(setAtom, args));
+                            $$.setPosition($1);
+                        }
+    | hintAttribute
     ;
 
 

+ 34 - 0
ecl/hql/hqlthql.cpp

@@ -967,6 +967,34 @@ void HqltHql::toECL(IHqlExpression *expr, StringBuffer &s, bool paren, bool inTy
                 break;
             }
         }
+        else if (expandProcessed && no == no_alias)
+        {
+            if (!isNamedSymbol)
+            {
+                if (!expr->queryTransformExtra())
+                {
+                    bool wasInsideNewTransform = insideNewTransform;
+                    insideNewTransform = false;
+
+                    StringBuffer temp;
+                    scope.append(NULL);
+                    temp.appendf("alias%p ", expr);
+                    temp.append(":= ");
+
+                    toECL(expr, temp, false, false, 0, true);
+                    temp.append(";").newline();
+                    addExport(temp);
+
+                    scope.pop();
+                    insideNewTransform = wasInsideNewTransform;
+                    expr->setTransformExtra(expr);
+                }
+                s.appendf("alias%p", expr);
+                if (paren)
+                    s.append(')');
+                return;
+            }
+        }
 
         if (expandProcessed && !isNamedSymbol && no == no_record)
         {
@@ -2080,6 +2108,12 @@ void HqltHql::toECL(IHqlExpression *expr, StringBuffer &s, bool paren, bool inTy
             else
                 toECL(child0, s, false, inType);
             break;
+        case no_clustersize:
+            if (expandProcessed)
+                defaultToECL(expr, s, inType);
+            else
+                s.append(getEclOpString(no));
+            break;
         case no_map:
         {
             unsigned kids = expr->numChildren();

+ 7 - 0
ecl/hql/hqltrans.cpp

@@ -1784,6 +1784,13 @@ void NewHqlTransformer::transformRoot(const HqlExprArray & in, HqlExprArray & ou
     }
 }
 
+void NewHqlTransformer::transformRoot(HqlExprArray & exprs)
+{
+    HqlExprArray temp;
+    transformRoot(exprs, temp);
+    exprs.swapWith(temp);
+}
+
 
 IHqlExpression * NewHqlTransformer::doTransformRootExpr(IHqlExpression * expr)
 {

+ 1 - 0
ecl/hql/hqltrans.ipp

@@ -441,6 +441,7 @@ public:
     void analyseArray(const HqlExprArray & exprs, unsigned pass);
 
     void transformRoot(const HqlExprArray & in, HqlExprArray & out);
+    void transformRoot(HqlExprArray & out);
     IHqlExpression * transformRoot(IHqlExpression * expr) { return doTransformRootExpr(expr); }
 
 protected:

+ 10 - 7
ecl/hqlcpp/hqlcpp.cpp

@@ -1590,6 +1590,7 @@ void HqlCppTranslator::cacheOptions()
         DebugOption(options.defaultPersistExpiry, "defaultPersistExpiry", DEFAULT_PERSIST_EXPIRY_PERIOD),
         DebugOption(options.defaultExpiry, "defaultExpiry", DEFAULT_EXPIRY_PERIOD),
         DebugOption(options.searchDistanceThreshold, "searchDistanceThreshold", 1000000),
+        DebugOption(options.generateActivityThreshold, "generateActivityThreshold", 0),  // most users are not interested so disable by default
 
         DebugOption(options.checkAsserts,"checkAsserts", true),
         DebugOption(options.assertSortedDistributed,"assertSortedDistributed", false),
@@ -1899,6 +1900,8 @@ void HqlCppTranslator::postProcessOptions()
     if (options.resourceSequential)
         options.resourceConditionalActions = true;
 
+    options.generateActivityThresholdCycles = nanosec_to_cycle(options.generateActivityThreshold * I64C(1000000));
+
     //Probably best to ignore this warning. - possibly configure it based on some other option
     globalOnWarnings->addOnWarning(HQLWRN_FoldRemoveKeyed, ignoreAtom);
 
@@ -7423,6 +7426,12 @@ bool HqlCppTranslator::ifRequiresAssignment(BuildCtx & ctx, IHqlExpression * exp
 
 void HqlCppTranslator::doBuildAssignIf(BuildCtx & ctx, const CHqlBoundTarget & target, IHqlExpression * expr)
 {
+    CHqlBoundExpr bound;
+    if (expr->isPure() && ctx.getMatchExpr(expr, bound))
+    {
+        assign(ctx, target, bound);
+        return;
+    }
     if (!ifRequiresAssignment(ctx, expr))
     {
         doBuildExprAssign(ctx, target, expr);
@@ -10390,13 +10399,7 @@ void HqlCppTranslator::assign(BuildCtx & ctx, const CHqlBoundTarget & target, CH
                     {
                         //I can't think of any situation where this isn't true....
                         assertex(hasLinkCountedModifier(rhs.expr));
-                        StringBuffer assignText;
-                        generateExprCpp(assignText, lhs).append(".set(");
-                        generateExprCpp(assignText, rhs.expr).append(");");
-                        ctx.addQuoted(assignText);
-                        //Could generate the following instead
-                        //ctx.addAssign(lhs, no_link(rhs.expr));
-                        //And post-optimize to the above.
+                        ctx.addAssignLink(lhs, rhs.expr);
                     }
                     else
                         ctx.addAssign(lhs, rhs.expr);

+ 2 - 0
ecl/hqlcpp/hqlcpp.ipp

@@ -591,6 +591,8 @@ struct HqlCppOptions
     unsigned            defaultExpiry;
     unsigned            varFieldAccessorThreshold;
     unsigned            searchDistanceThreshold;
+    unsigned            generateActivityThreshold;    // Record activities which take more than this value (in ms) to generate (0 disables)
+    cycle_t             generateActivityThresholdCycles;
    int                 defaultNumPersistInstances;
     unsigned            reportDFSinfo;
     CompilerType        targetCompiler;

+ 43 - 0
ecl/hqlcpp/hqlhtcpp.cpp

@@ -2211,6 +2211,10 @@ void ActivityInstance::noteChildActivityLocation(IHqlExpression * pass)
 
 void ActivityInstance::buildPrefix()
 {
+    const HqlCppOptions & options = translator.queryOptions();
+    if (options.generateActivityThresholdCycles != 0)
+        startTime = get_cycles_now();
+
     startDistance = querySearchDistance();
     StringBuffer s;
 
@@ -2333,6 +2337,24 @@ void ActivityInstance::buildSuffix()
             addAttributeInt("approxClassSize", approxSize);
     }
 
+    if (options.generateActivityThresholdCycles != 0)
+    {
+        cycle_t totalTime = get_cycles_now() - startTime;
+        cycle_t localTime = totalTime - nestedTime;
+        if (localTime > options.generateActivityThresholdCycles)
+        {
+            if (containerActivity)
+                containerActivity->nestedTime += totalTime;
+
+            unsigned __int64 generateTime = cycle_to_nanosec(localTime);
+            //Record as a statistic rather than a graph attribute to avoid stats iterators needing to walk the graph
+            //We could also record local and totalTime if they differ - but that would then need another stats kind
+            StringBuffer scope;
+            getScope(scope);
+            translator.wu()->setStatistic(queryStatisticsComponentType(), queryStatisticsComponentName(), SSTactivity, scope, StTimeGenerate, nullptr, generateTime, 1, 0, StatsMergeReplace);
+        }
+    }
+
     unsigned __int64 searchDistance = querySearchDistance() - startDistance;
     if (searchDistance > options.searchDistanceThreshold)
         addAttributeInt("searchDistance", searchDistance);
@@ -2393,6 +2415,21 @@ void ActivityInstance::buildMetaMember()
 }
 
 
+void ActivityInstance::getScope(StringBuffer & scope) const
+{
+    if (containerActivity)
+    {
+        containerActivity->getScope(scope);
+        scope.append(":");
+    }
+    else if (translator.activeGraph)
+        scope.append(translator.activeGraph->name).append(":");
+
+    if (subgraph)
+        scope.append(SubGraphScopePrefix).append(subgraph->id).append(":");
+    scope.append(ActivityScopePrefix).append(activityId);
+}
+
 void ActivityInstance::addConstructorMetaParameter()
 {
     translator.buildMetaInfo(meta);
@@ -9408,6 +9445,12 @@ IHqlExpression * HqlCppTranslator::getResourcedGraph(IHqlExpression * expr, IHql
     if (true)
         resourced.setown(optimizeCompoundSource(resourced, CSFpreload|csfFlags));
 
+    //Check to see if fields can be removed - this helps LOOP bodies, but also seems to help situations where hoisting
+    //expressions prevents child expressions from preventing fields from being removed.
+    //Perform before the optimizeHqlExpression() so decisions about reducing row sizes are accurate
+    traceExpression("BeforeImplicitProjectGraph", resourced);
+    resourced.setown(insertImplicitProjects(*this, resourced, false));
+
     // Call optimizer before resourcing so items get moved over conditions, and remove other items
     // which would otherwise cause extra spills.
     traceExpression("BeforeOptimize", resourced);

+ 3 - 0
ecl/hqlcpp/hqlhtcpp.ipp

@@ -145,6 +145,7 @@ public:
     void buildPrefix();
     void buildSuffix();
     void buildMetaMember();
+    void getScope(StringBuffer & scope) const; // return the full scope name of this activity
 
     void addAttribute(const char * name, const char * value);
     void addAttribute(const char * name, IHqlExpression * expr);
@@ -229,6 +230,8 @@ public:
     OwnedHqlExpr colocalMember;
     Owned<ParentExtract> nestedExtract;
     SubGraphInfo * subgraph;
+    cycle_t startTime = 0;
+    cycle_t nestedTime = 0;
     unsigned __int64 startDistance = 0;
 };
 

+ 1 - 0
ecl/hqlcpp/hqlres.cpp

@@ -485,6 +485,7 @@ bool ResourceManager::flush(StringBuffer &filename, const char *basename, bool f
         }
         else
         {
+            fprintf(f, " .section .note.GNU-stack,\"\",@progbits\n");   // Prevent the stack from being marked as executable
             fprintf(f, " .section %s_%u,\"a\"\n", type, id);
             fprintf(f, " .global %s\n", label.str());
             fprintf(f, " .type %s,STT_OBJECT\n", label.str());

+ 32 - 0
ecl/hqlcpp/hqlstmt.cpp

@@ -832,6 +832,38 @@ HqlExprAssociation * BuildCtx::queryFirstCommonAssociation(AssocKind searchKind)
 }
 
 
+void BuildCtx::walkAssociations(AssocKind searchMask, IAssociationVisitor & visitor)
+{
+    HqlStmts * searchStmts = curStmts;
+
+    // search all statements in the tree before this one, to see
+    // if an expression already exists...  If so return the target
+    // of the assignment.
+    for (;;)
+    {
+        if (searchStmts->associationMask & searchMask)
+        {
+            CIArray & defs = searchStmts->defs;
+            ForEachItemInRev(idx, searchStmts->defs)
+            {
+                HqlExprAssociation & cur = (HqlExprAssociation &)searchStmts->defs.item(idx);
+                if (cur.getKind() & searchMask)
+                {
+                    if (visitor.visit(cur))
+                        return;
+                }
+            }
+        }
+
+        HqlStmt * limitStmt = searchStmts->queryStmt();
+        if (!limitStmt)
+            break;
+        searchStmts = limitStmt->queryContainer();
+    }
+}
+
+
+
 HqlExprAssociation * BuildCtx::queryMatchExpr(IHqlExpression * search)
 {
     HqlExprCopyArray selectors;

+ 1 - 0
ecl/hqlcpp/hqlstmt.hpp

@@ -139,6 +139,7 @@ public:
     HqlExprAssociation *        queryAssociation(IHqlExpression * dataset, AssocKind kind, HqlExprCopyArray * selectors);
     HqlExprAssociation *        queryFirstAssociation(AssocKind kind);
     HqlExprAssociation *        queryFirstCommonAssociation(AssocKind kind);
+    void                        walkAssociations(AssocKind searchMask, IAssociationVisitor & visitor); // Function to walk associations filtered by kind
     HqlExprAssociation *        queryMatchExpr(IHqlExpression * expr);
     bool                        getMatchExpr(IHqlExpression * expr, CHqlBoundExpr & bound);
     IHqlExpression *            getTempDeclare(ITypeInfo * type, IHqlExpression * value);

+ 18 - 20
ecl/hqlcpp/hqlttcpp.cpp

@@ -4816,8 +4816,8 @@ IHqlExpression * CompoundActivityTransformer::createTransformed(IHqlExpression *
 //------------------------------------------------------------------------
 
 static HqlTransformerInfo optimizeActivityTransformerInfo("OptimizeActivityTransformer");
-OptimizeActivityTransformer::OptimizeActivityTransformer(bool _optimizeCountCompare, bool _optimizeNonEmpty)
-: NewHqlTransformer(optimizeActivityTransformerInfo)
+OptimizeActivityTransformer::OptimizeActivityTransformer(unsigned _wfid, bool _optimizeCountCompare, bool _optimizeNonEmpty)
+: NewHqlTransformer(optimizeActivityTransformerInfo), wfid(_wfid)
 {
     optimizeCountCompare = _optimizeCountCompare; optimizeNonEmpty = _optimizeNonEmpty;
 }
@@ -5160,7 +5160,14 @@ IHqlExpression * OptimizeActivityTransformer::doCreateTransformed(IHqlExpression
             unwindChildren(args, expr, 2);
             return expr->clone(args);
         }
-
+    case no_clustersize:
+        if (wfid && !expr->hasAttribute(pureAtom))
+        {
+            OwnedHqlExpr attribute = createExprAttribute(pureAtom, getSizetConstant(wfid));
+            OwnedHqlExpr modified = appendOwnedOperand(expr, attribute.getClear());
+            return expr->cloneAllAnnotations(modified);
+        }
+        break;
     case no_eq:
     case no_ne:
     case no_le:
@@ -5186,21 +5193,11 @@ IHqlExpression * OptimizeActivityTransformer::doCreateTransformed(IHqlExpression
 }
 
 
-void optimizeActivities(HqlExprArray & exprs, bool optimizeCountCompare, bool optimizeNonEmpty)
+void optimizeActivities(unsigned wfid, HqlExprArray & exprs, bool optimizeCountCompare, bool optimizeNonEmpty)
 {
-    OptimizeActivityTransformer transformer(optimizeCountCompare, optimizeNonEmpty);
-    HqlExprArray results;
+    OptimizeActivityTransformer transformer(wfid, optimizeCountCompare, optimizeNonEmpty);
     transformer.analyseArray(exprs, 0);
-    transformer.transformRoot(exprs, results);
-    replaceArray(exprs, results);
-}
-
-IHqlExpression * optimizeActivities(IHqlExpression * expr, bool optimizeCountCompare, bool optimizeNonEmpty)
-{
-    OptimizeActivityTransformer transformer(optimizeCountCompare, optimizeNonEmpty);
-    HqlExprArray results;
-    transformer.analyse(expr, 0);
-    return transformer.transformRoot(expr);
+    transformer.transformRoot(exprs);
 }
 
 IHqlExpression * GlobalAttributeInfo::queryAlias(IHqlExpression * value)
@@ -7700,6 +7697,8 @@ bool ScalarGlobalTransformer::isComplex(IHqlExpression * expr, bool checkGlobal)
     case no_constant:
     case no_globalscope:
     case no_libraryinput:
+    case no_clustersize:
+    case no_nothor:
         return false;
     case no_cast:
     case no_implicitcast:
@@ -10779,6 +10778,7 @@ void LeftRightTransformer::process(HqlExprArray & exprs)
     transformRoot(exprs, transformed);
     replaceArray(exprs, transformed);
 }
+
 //---------------------------------------------------------------------------------------------------------------------
 
 /*
@@ -13354,9 +13354,7 @@ void normalizeHqlTree(HqlCppTranslator & translator, HqlExprArray & exprs)
     {
         cycle_t startCycles = get_cycles_now();
         HqlScopeTagger normalizer(translator.queryErrorProcessor(), translator.queryLocalOnWarningMapper());
-        HqlExprArray transformed;
-        normalizer.transformRoot(exprs, transformed);
-        replaceArray(exprs, transformed);
+        normalizer.transformRoot(exprs);
         translator.noteFinishedTiming("compile:tree transform: normalize.scope", startCycles);
     }
 
@@ -13729,7 +13727,7 @@ void HqlCppTranslator::transformWorkflowItem(WorkflowItem & curWorkflow)
     //sort(x)[n] -> topn(x, n)[]n, count(x)>n -> count(choosen(x,n+1)) > n and possibly others
     {
         cycle_t startCycles = get_cycles_now();
-        optimizeActivities(curWorkflow.queryExprs(), !targetThor(), options.optimizeNonEmpty);
+        optimizeActivities(curWorkflow.queryWfid(), curWorkflow.queryExprs(), !targetThor(), options.optimizeNonEmpty);
         noteFinishedTiming("compile:tree transform: optimize activities", startCycles);
     }
     checkNormalized(curWorkflow);

+ 3 - 3
ecl/hqlcpp/hqlttcpp.ipp

@@ -363,7 +363,7 @@ private:
 class OptimizeActivityTransformer : public NewHqlTransformer
 {
 public:
-    OptimizeActivityTransformer(bool _optimizeCountCompare, bool _optimizeNonEmpty);
+    OptimizeActivityTransformer(unsigned _wfid, bool _optimizeCountCompare, bool _optimizeNonEmpty);
 
     virtual void analyseExpr(IHqlExpression * expr);
     virtual IHqlExpression * createTransformed(IHqlExpression * expr);
@@ -379,6 +379,7 @@ protected:
     inline bool isShared(IHqlExpression * expr)                 { return queryBodyExtra(expr)->isShared(); }
 
 protected:
+    unsigned wfid;
     bool optimizeCountCompare;
     bool optimizeNonEmpty;
 };
@@ -1299,8 +1300,7 @@ void mergeThorGraphs(WorkflowItem & curWorkflow, bool resourceConditionalActions
 void migrateExprToNaturalLevel(WorkflowItem & curWorkflow, IWorkUnit * wu, HqlCppTranslator & translator);
 void removeTrivialGraphs(WorkflowItem & curWorkflow);
 void extractWorkflow(HqlCppTranslator & translator, HqlExprArray & exprs, WorkflowArray & out);
-void optimizeActivities(HqlExprArray & exprs, bool optimizeCountCompare, bool optimizeNonEmpty);
-IHqlExpression * optimizeActivities(IHqlExpression * expr, bool optimizeCountCompare, bool optimizeNonEmpty);
+void optimizeActivities(unsigned wfid, HqlExprArray & exprs, bool optimizeCountCompare, bool optimizeNonEmpty);
 IHqlExpression * insertImplicitProjects(HqlCppTranslator & translator, IHqlExpression * expr, bool optimizeSpills);
 void insertImplicitProjects(HqlCppTranslator & translator, HqlExprArray & exprs);
 

+ 5 - 3
ecl/regress/export3.ecl

@@ -23,8 +23,8 @@ string20 last;
         end;
 r := RECORD
   unsigned integer4 dg_parentid;
-  string10 dg_firstname;
-  string dg_lastname;
+  string10 dg_firstname{hint(type('ssn'),age(12),date(9..12),case(upper))};
+  string dg_lastname{set(type('ssn'),age(12)),set(date(9..12)),set(case(upper))};
   unsigned integer1 dg_prange;
   IFBLOCK(SELF.dg_prange % 2 = 0)
    string20 extrafield;
@@ -38,6 +38,7 @@ ds := dataset('ds', r, thor);
 
 //Walk a record and do some processing on it.
 #DECLARE(out)
+#declare(age)
 #EXPORT(out, r);
 LOADXML(%'out'%, 'FileStructure');
 
@@ -50,7 +51,8 @@ output(%'@type'%
    #IF (%'@size'% <> '-15' AND %'@isRecord'%='' AND %'@isDataset'%='')
 + %'@size'%
    #end
- + ' ' + %'@label'% + ';');
+   #SET(age, REGEXFIND('age\\((.*?)\\)', %'@options'%, 1))
+ + ' ' + %'@label'% + ' ' + %'@options'% + ' age(' + %age% + ');');
   #END
  #END
 #END

+ 18 - 2
esp/platform/espcfg.cpp

@@ -467,7 +467,15 @@ void CEspConfig::loadServices()
     map<string, srv_cfg*>::iterator iter = m_services.begin();
     while (iter!=m_services.end())
     {
-        loadService(*(iter->second));
+#ifndef _USE_OPENLDAP
+        const string svcName = iter->first;
+        if (!strstr(svcName.data(), "ws_access"))
+#endif
+            loadService(*(iter->second));
+#ifndef _USE_OPENLDAP
+        else
+            DBGLOG("Not loading service %s, platform built without LDAP", svcName.data());
+#endif
         iter++;
     }
 }
@@ -488,7 +496,15 @@ void CEspConfig::loadBindings()
     
     while (iter!=m_bindings.end())
     {
-        loadBinding(**iter);
+#ifndef _USE_OPENLDAP
+        const char * bindingName = (**iter).name.str();
+        if (!strstr(bindingName, "ws_access"))
+#endif
+            loadBinding(**iter);
+#ifndef _USE_OPENLDAP
+        else
+            DBGLOG("Not binding %s, platform built without LDAP", bindingName);
+#endif
         iter++;
     }
 }

+ 3 - 0
esp/src/eclwatch/ESPWorkunit.js

@@ -240,6 +240,9 @@ define([
         isDeleted: function () {
             return this.StateID === 999;
         },
+        isBlocked: function () {
+            return this.StateID === 8;
+        },
         monitor: function (callback) {
             if (callback) {
                 callback(this);

+ 14 - 2
esp/src/eclwatch/LZBrowseWidget.js

@@ -119,6 +119,7 @@ define([
             this.fixedSprayReplicateCheckbox = registry.byId(this.id + "FixedSprayReplicate");
             this.delimitedSprayReplicateCheckbox = registry.byId(this.id + "DelimitedSprayReplicate");
             this.xmlSprayReplicateCheckbox = registry.byId(this.id + "XMLSprayReplicate");
+            this.sprayXMLButton = registry.byId(this.id + "SprayXMLButton");
             this.variableSprayReplicateCheckbox = registry.byId(this.id + "VariableSprayReplicate");
             this.blobSprayReplicateCheckbox = registry.byId(this.id + "BlobSprayReplicate");
             this.filter = registry.byId(this.id + "Filter");
@@ -719,7 +720,18 @@ define([
                         editorArgs: {
                             required: true,
                             placeholder: this.i18n.RequiredForXML,
-                            promptMessage: this.i18n.RequiredForXML
+                            promptMessage: this.i18n.RequiredForXML,
+                            validator: function(value, constraints) {
+                                var valid = true;
+                                if ((value != null ) && (value != "")) {
+                                    valid = true;
+                                    context.sprayXMLButton.set("disabled", false);
+                                } else {
+                                    context.sprayXMLButton.set("disabled", true);
+                                    valid = false;
+                                }
+                                return valid;
+                            }
                         }
                     })
                 }
@@ -800,7 +812,7 @@ define([
                     lang.mixin(item, lang.mixin({
                         targetName: item.displayName,
                         targetRecordLength: "",
-                        targetRowTag: "",
+                        targetRowTag: "Row",
                         targetRowPath: "/"
                     }, item));
                     data.push(item);

+ 10 - 1
esp/src/eclwatch/UserQueryWidget.js

@@ -35,6 +35,7 @@ define([
 
     "hpcc/_TabContainerWidget",
     "hpcc/ws_access",
+    "hpcc/ws_account",
     "hpcc/ESPBase",
     "hpcc/ESPUtil",
     "hpcc/ESPRequest",
@@ -66,7 +67,7 @@ define([
 ], function (declare, lang, i18n, nlsHPCC, arrayUtil, dom, domForm, on, all,
                 registry, Menu, MenuItem, MenuSeparator, Select,
                 tree, selector,
-                _TabContainerWidget, WsAccess, ESPBase, ESPUtil, ESPRequest, UserDetailsWidget, GroupDetailsWidget, FilterDropDownWidget, TargetSelectWidget, ShowAccountPermissionsWidget, ShowIndividualPermissionsWidget,
+                _TabContainerWidget, WsAccess, WsAccount, ESPBase, ESPUtil, ESPRequest, UserDetailsWidget, GroupDetailsWidget, FilterDropDownWidget, TargetSelectWidget, ShowAccountPermissionsWidget, ShowIndividualPermissionsWidget,
                 template) {
     return declare("UserQueryWidget", [_TabContainerWidget], {
         templateString: template,
@@ -94,6 +95,7 @@ define([
             this.showPermissionsGrid = registry.byId(this.id + "ShowPermissionsGrid");
             this.checkFileSubmit = registry.byId(this.id + "CheckFileSubmit");
             this.nameSelect = registry.byId(this.id + "NameSelect");
+            this.addGroupOwner = registry.byId(this.id + "AddGroupOwner");
         },
 
         //  Hitched actions  ---
@@ -492,6 +494,13 @@ define([
                 context.refreshUsersGrid();
             });
 
+            WsAccount.MyAccount({
+            }).then(function (response){
+                if (lang.exists("MyAccountResponse.distinguishedName", response)) {
+                    context.addGroupOwner.set("value", response.MyAccountResponse.distinguishedName);
+                }
+            });
+
             this.refreshActionState();
         },
 

+ 1 - 1
esp/src/eclwatch/WUDetailsWidget.js

@@ -559,7 +559,7 @@ define([
         refreshActionState: function () {
             var isArchived = this.wu.get("Archived");
             this.setDisabled(this.id + "AutoRefresh", isArchived || this.wu.isComplete(), "iconAutoRefresh", "iconAutoRefreshDisabled");
-            registry.byId(this.id + "Save").set("disabled", isArchived || !this.wu.isComplete() || this.wu.isDeleted());
+            registry.byId(this.id + "Save").set("disabled", isArchived || (!this.wu.isComplete() && !this.wu.isBlocked()) || this.wu.isDeleted());
             registry.byId(this.id + "Delete").set("disabled", isArchived || !this.wu.isComplete() || this.wu.isDeleted());
             registry.byId(this.id + "Restore").set("disabled", !isArchived);
             registry.byId(this.id + "SetToFailed").set("disabled", isArchived || this.wu.isComplete() || this.wu.isDeleted());

+ 1 - 1
esp/src/eclwatch/templates/LZBrowseWidget.html

@@ -148,7 +148,7 @@
                                     </div>
                                 </div>
                                 <div class="dijitDialogPaneActionBar">
-                                    <button data-dojo-attach-event="onClick:_onSprayXml" data-dojo-type="dijit.form.Button">${i18n.Spray}</button>
+                                    <button id="${id}SprayXMLButton" data-dojo-attach-event="onClick:_onSprayXml" data-dojo-type="dijit.form.Button">${i18n.Spray}</button>
                                 </div>
                             </div>
                         </div>

+ 4 - 4
esp/src/eclwatch/templates/UserQueryWidget.html

@@ -69,11 +69,11 @@
                     <div id="${id}AddGroupsDropDown" data-dojo-type="dijit.form.DropDownButton">
                         <span>${i18n.Add}</span>
                         <div data-dojo-type="dijit.TooltipDialog">
-                            <div id="${id}AddGroupForm" onsubmit="return false;" style="width:400px" data-dojo-type="dijit.form.Form">
+                            <div id="${id}AddGroupForm" onsubmit="return false;" style="width:500px" data-dojo-type="dijit.form.Form">
                                 <div data-dojo-type="hpcc.TableContainer">
-                                    <input id="${id}AddGroupName" title="${i18n.GroupName}:" name="groupname" data-dojo-props="trim: true, required: true" data-dojo-type="dijit.form.ValidationTextBox" />
-                                    <input id="${id}AddGroupOwner" placeholder="${i18n.ManagedByPlaceholder}:" title="${i18n.ManagedBy}:" name="groupOwner" data-dojo-props="trim: true, required: true" data-dojo-type="dijit.form.ValidationTextBox" />
-                                    <input id="${id}AddGroupDescription" title="${i18n.Description}:" name="groupDesc" data-dojo-props="trim: true, required: true" data-dojo-type="dijit.form.ValidationTextBox" />
+                                    <input id="${id}AddGroupName" style="width:100%" title="${i18n.GroupName}:" name="groupname" data-dojo-props="trim: true, required: true" data-dojo-type="dijit.form.ValidationTextBox" />
+                                    <input id="${id}AddGroupOwner" style="width:100%" placeholder="${i18n.ManagedByPlaceholder}:" title="${i18n.ManagedBy}:" name="groupOwner" data-dojo-props="trim: true, required: true" data-dojo-type="dijit.form.ValidationTextBox" />
+                                    <input id="${id}AddGroupDescription" style="width:100%" title="${i18n.Description}:" name="groupDesc" data-dojo-props="trim: true, required: true" data-dojo-type="dijit.form.ValidationTextBox" />
                                 </div>
                                 <div class="dijitDialogPaneActionBar">
                                     <button type="submit" data-dojo-attach-event="onClick:_onAddGroupSubmit" data-dojo-type="dijit.form.Button">${i18n.Add}</button>

+ 0 - 0
initfiles/.gitattributes


部分文件因为文件数量过多而无法显示