summaryrefslogtreecommitdiffstats
path: root/src/plantuml.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Refactor: modernize configuration valuesDimitri van Heesch2020-06-041-13/+15
|
* Fixes signed/unsigned mismatch warning in plantuml.cppDimitri van Heesch2020-05-101-13/+15
|
* Merge pull request #7559 from albert-github/feature/bug_plantuml_hashAsciiKeyDimitri van Heesch2020-05-101-1/+7
|\ | | | | Plantuml has problems with output directories ending with directory separator
| * Plantuml has problems with output directories ending with directory separatoralbert-github2020-02-011-1/+7
| | | | | | | | | | | | | | | | | | Based on the message in #7558 In case a `HTML_OUTPUT` directory (or other `*_OUTPUT` directory ends with a directory separator we get the message: ``` QGDict::hashAsciiKey: Invalid null key ``` by stripping the directory separator this problem can be overcome.
* | Enabled stricter compiler warnings and fixed all new warningsDimitri van Heesch2020-03-081-3/+3
| |
* | issue #7558 PlantUML: Different behavior whether LATEX_OUTPUT has a final ↵albert-github2020-02-031-24/+20
|/ | | | | | | | | | | slash or not. The problem is that full qualified paths in `*_OUTPUT` were not handled properly they were handled as it were relative paths. In the documentation it is stated for e.g. LATEX_OUTPUT: > The LATEX_OUTPUT tag is used to specify where the LATEX docs will be put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put in front of it. So in case of a non relative path the given path should be used and this path can be unrelated to `OUTPUT_DIRECTORY`, so we have to store the designated output path as well.
* Renamed Portables to PortableDimitri van Heesch2019-12-081-8/+8
|
* Refactoring of portable.h and portable.cpp functions to be contained in a ↵Tobias Off2019-11-281-8/+8
| | | | | | namespace Fixing some memory issues caused by not correctly freed pointers
* Don't write the plantuml cache file in case there are no plantuml diagrams.albert-github2019-01-101-0/+1
|
* Merge branch 'run_java_once_3rd_trial' of ↵Dimitri van Heesch2019-01-081-128/+109
|\ | | | | | | https://github.com/cheoljoo/doxygen into cheoljoo-run_java_once_3rd_trial
| * remove PLANTUML_RUN_FAST because FAST is default.Charles.Lee2019-01-061-112/+8
| | | | | | | | | | | | - remove PLANTUML_RUN_FAST in config.xml - Do not make plantuml (.pu) file for each plantuml script. (ex. inline_umlgraph_#.pu) But, make type plantuml files (ex. inline_umlgraph_<type>..pu)
| * Fast PlantumlCharles.Lee2019-01-011-13/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # Test Result The example has 5 plantumls. | Test Type | Original | PLANTUML_RUN_FAST | Modify One Plantuml | |---------------------------|------------|-------------|-----------------| | Elapsed Time | 23.370 sec | 7.349 sec | 4.652 sec | | external tools Time | 23.020 sec | 6.819 sec | 4.301 sec | # Test Environments (How to test) - The example has 5 plantumls. ## Original Configration - I follow the original path to process plantuml. - Configuration of Doxyfile - OUTPUT_DIRECTORY = OUTPUT - SOURCE_BROWSER = YES - GENERATE_HTML = YES only set the html - GENERATE_LATEX = NO - Run - $ doxygen -d time ## PLANTUML_RUN_FAST - Changed Configuration of Doxyfile - PLANTUML_RUN_FAST = YES ## Modify One Plantuml - Modify one plantuml in 5 plantuml of example with the same environment of PLANTUML_RUN_TEST # How to Reduce the performance ## PLANTUML_RUN_FAST - Make Just one pu (plantuml) file to run java once - Just run once when we generate HTML. ### another test with setting YES to all GENERATE_* - When we generate several types , we run java several times according the different java arguments. - set YES to all GENERATE_* - There are 20 plantuml in this example and configuration. But, it runs java just 4 times. ```text Executing external command `java -Djava.awt.headless=true -jar "/Users/cheoljoo/bin/plantuml.jar" -o "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/docbook" -charset UTF-8 -tpng "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/docbook/inline_umlgraph_pngdocbook.pu" ` 10.019 sec: Running PlantUML on png PlantumlFiles in html Executing external command `java -Djava.awt.headless=true -jar "/Users/cheoljoo/bin/plantuml.jar" -o "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/html" -charset UTF-8 -tpng "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/html/inline_umlgraph_pnghtml.pu" ` 17.906 sec: Running PlantUML on png PlantumlFiles in rtf Executing external command `java -Djava.awt.headless=true -jar "/Users/cheoljoo/bin/plantuml.jar" -o "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/rtf" -charset UTF-8 -tpng "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/rtf/inline_umlgraph_pngrtf.pu" ` 25.842 sec: Running PlantUML on eps PlantumlFiles in latex Executing external command `java -Djava.awt.headless=true -jar "/Users/cheoljoo/bin/plantuml.jar" -o "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/latex" -charset UTF-8 -teps "/Users/cheoljoo/Code/github/doxygen/build/bin/B/OUTPUT/latex/inline_umlgraph_epslatex.pu" ` ``` ## Modify One Plantuml - Cached file name : OUTPUT_DIRECTORY/inline_umlgraph_cache_all.pu - inline_umlgraph_cache_all.pu was created when doxygen was finished. - inline_umlgraph_cache_all.pu had all plantuml contents. and it will be used to check what is changed. - If you want to keep pu files , DOT_CLEANUP = NO - inline_umlgraph_<type><dictory>.pu includes changed plantuml. So it can reduce the java processing time. # Explanation of the code ## old - generatePlantUMLOutput() makes each plantuml from each @start~enduml with the name as inline_umlgraph_#.pu. ## new (PLANTUML_RUN_FAST) - It will make a plantuml png at the end of processes of doxygen. So we can reduce the count of java runs. - class PlantumlManager saves all plantuml information for running java at the end of doxygen and for comparing the plantuml contents as a cache. - generatePlantUMLOutput() is not enough to make a database in class PlantumlManager. - So I use writePlantUMLSource() to get more information (pu name and contents). I modified writePlantUMLSource() because I do not want to read the file to get the contents in generatePlantUMLOutput(). - The writePlantUMLSource() compares each plantuml contents and filename with cached information (inline_umlgraph_cache_all.pu). Then it will decide whether will recreate or reuse. - Like dot , we make plantuml pictures at the end of doxygen. ```puml @startuml folder config.xml { artifact PLANTUML_RUN_FAST folder config.xml [ artifact xml ==== and style ] } folder debug.cpp { artifact "Debug::Plantuml" folder debug.h { artifact "Plantuml=0x4000" } } config.xml -down-> debug.cpp debug.cpp -down-> docvisitor.cpp folder docvisitor.cpp { folder writePlantUMLSource { folder writePlantUMLSource.old [ write plantuml file (inline_umlgraph_#.pu) ---- writePlantUMLFile() generatePlantUMLOutput() ] folder writePlantUMLSource.new [ write plantuml file (inline_umlgraph_#) writePlantUMLFile() generatePlantUMLOutput() ---- add PUML_Type as arguments PlantumlManager::instance()->insert(generateType,puName,format,text); ] writePlantUMLSource -down-> writePlantUMLSource.old : Original writePlantUMLSource -down-> writePlantUMLSource.new : PLANTUML_RUN_FAST } artifact docbookvisitor.cpp artifact htmldocvisitor.cpp artifact latexdocvisitor.cpp artifact rtfdocvisitor.cpp artifact vhdldocgen.cpp } database PlantumlManager.DB [ static PlantumlManager *m_theInstance; QDict< QList<QCString> > m_pngPlantumlFiles; QDict< QList<QCString> > m_svgPlantumlFiles; QDict< QList<QCString> > m_epsPlantumlFiles; QDict< QCString > m_pngPlantumlContent; QDict< QCString > m_svgPlantumlContent; QDict< QCString > m_epsPlantumlContent; ] writePlantUMLSource.new -down-> PlantumlManager.DB : PLANTUML_RUN_FAST folder plantuml.cpp { folder generatePlantUMLOutput.old [ run java for each inline_umlgraph_#.pu ] folder generatePlantUMLOutput.new [ No run java for run once at the end of process Just add image into list ] writePlantUMLSource.old -down-> generatePlantUMLOutput.old : original writePlantUMLSource.new -down-> generatePlantUMLOutput.new : PLANTUML_RUN_FAST } folder doxygen.cpp { folder plantuml.h [ class PlantumlManager ] } folder plantuml.cpp { folder PlantumlManager_run [ PlantumlManager::instance()->run(); - run java once at the last time of doxygen process like drawing dot graph - read a inline_umlgraph_cache.pu - if exist , reuse it. - if not exist , add inline_umlgraph_type.pu - save all plantuml into inline_umlgraph_cache_all.pu for caching or reusing next time. - When we make inline_umlgraph_type.pu , we divide into 4 files for multi-processing. - But , prcessing image count is less than 8 , we will use only one file. ] } plantuml.h -down-> writePlantUMLSource : PLANTUML_RUN_FAST PlantumlManager.DB -down-> PlantumlManager_run : PLANTUML_RUN_FAST @enduml ```
| * # IntroductionCharles.Lee2018-12-281-33/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - this is doxygen documents. - draw the plantuml # Explanation how to process for FAST plantuml ```puml @startuml folder config.xml { artifact PLANTUML_RUN_FAST folder config.xml [ artifact xml ==== and style ] } folder debug.cpp { artifact "Debug::Plantuml" folder debug.h { artifact "Plantuml=0x4000" } } config.xml -down-> debug.cpp debug.cpp -down-> docvisitor.cpp folder docvisitor.cpp { folder writePlantUMLSource { folder writePlantUMLSource.old [ write plantuml file (inline_umlgraph_#.pu) ---- writePlantUMLFile() generatePlantUMLOutput() ] folder writePlantUMLSource.new [ write plantuml file (inline_umlgraph_#) writePlantUMLFile() generatePlantUMLOutput() ---- add PUML_Type as arguments PlantumlManager::instance()->insert(generateType,puName,format,text); ] writePlantUMLSource -down-> writePlantUMLSource.old : Original writePlantUMLSource -down-> writePlantUMLSource.new : PLANTUML_RUN_FAST } artifact docbookvisitor.cpp artifact htmldocvisitor.cpp artifact latexdocvisitor.cpp artifact rtfdocvisitor.cpp artifact vhdldocgen.cpp } database PlantumlManager.DB [ static PlantumlManager *m_theInstance; QDict< QList<QCString> > m_pngPlantumlFiles; QDict< QList<QCString> > m_svgPlantumlFiles; QDict< QList<QCString> > m_epsPlantumlFiles; QDict< QCString > m_pngPlantumlContent; QDict< QCString > m_svgPlantumlContent; QDict< QCString > m_epsPlantumlContent; ] writePlantUMLSource.new -down-> PlantumlManager.DB : PLANTUML_RUN_FAST folder plantuml.cpp { folder generatePlantUMLOutput.old [ run java for each inline_umlgraph_#.pu ] folder generatePlantUMLOutput.new [ No run java for run once at the end of process Just add image into list ] writePlantUMLSource.old -down-> generatePlantUMLOutput.old : original writePlantUMLSource.new -down-> generatePlantUMLOutput.new : PLANTUML_RUN_FAST } folder doxygen.cpp { folder plantuml.h [ class PlantumlManager ] } folder plantuml.cpp { folder PlantumlManager_run [ PlantumlManager::instance()->run(); - run java once at the last time of doxygen process like drawing dot graph - read a inline_umlgraph_cache.pu - if exist , reuse it. - if not exist , add inline_umlgraph_type.pu - save all plantuml into inline_umlgraph_cache.pu for caching or reusing next time. - When we make inline_umlgraph_type.pu , we divide into 4 files for multi-processing. - But , prcessing image count is less than 8 , we will use only one file. ] } plantuml.h -down-> writePlantUMLSource : PLANTUML_RUN_FAST PlantumlManager.DB -down-> PlantumlManager_run : PLANTUML_RUN_FAST @enduml ``` ## cache - QCString m_cachePlantumlAllContent; // = fileToString = readInputFile // findScopePattern // QCString.find contains - instance() -> read cache file - writePlantULMSource() -> compare the text with cache contents - if matched , pass. - if not matched , add it. - add text to current plantuml - run() -> save current plantuml into cache file ## todo list - done - html example - cache - ing - multiple thread : divide into several files before running java. (already know the count) - epstopdf run : change the code like the java run
* | Improved code structure a bitDimitri van Heesch2018-12-271-45/+55
|/
* JAVA_ONCE -> FASTCharles.Lee2018-12-261-2/+2
|
* Imporvement of performance : Reduce the Java running count (3rd trial)Charles.Lee2018-08-291-116/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # What is it - #6465 is the first trial. So I followed up the albert advice. - in case of debug you use printf statements, I think that here there better options would be - create an -d flag (e.g. -d plantuml) that gives the information, so no need for using the configuration option - Follow up : create -d plantuml [debug.h, debug.cpp] - usage of printf - printf should not be used,all output is steered over calls to routines as defined in message.cpp, - Follow up : use Debug::Print(Debug::Plantuml, ... and msg() - usage of std::string / std::map - in doxygen the string manipulation is. mostly, done by means of Qt classes (e.g. classes QCString, QString). For consistency these classes should be used. - map manipulation is also done by means of Qt classes (dictionary and list classes) - Follow up : use QDict QList QCString [plantuml.h, plantuml.cpp] - dirent / opendir /readdir - when browsing through directories the routines line readFileOrDirectory should probably be used or the techniques used in this routine - Follow up : I will follow when I try to reduce redundancy of creating plantuml image. - #6467 is the second trial. This is work items to satisfiy comments. - In the debug statements the __PRETTY_FUNCTION__ is a GCC extension. But this project can run in windows. - I got it. I removed __PRETTY_FUNCTION__. - In the PLANTUML_RUN_JAVA_ONCE all the .pu files are given to the plantuml.jar with their full path (see -d extcmd when running). I think this will lead to problems when there are quite a few files ("command line" overflow). Seen this merging the files into one file like done for formulas. A small test with one file revealed that it didn't bring a lot / nothing time wise, but here the problem with the "command line" overflow shouldn't / can't happen. - Yes. The command line has overflow problem. So I change into one file. - I think it still would make sense to implement the 'md5' possibility for, especially, the non PLANTUML_RUN_JAVA_ONCE version, i.e. if the file already exists don't try to recreate the image. - This is a next item. - PlantumlManager::instance()->insert() : this function will be changed to skip image. # Configuration - add configuration value in Doxyfile - PLANTUML_RUN_JAVA_ONCE = YES # Debugging - doxygen -d plantuml - doxygen -d time -d extcmd # Tested with following options - source code of 3 plantuml - PLANTUML_RUN_JAVA_ONCE = YES or NO - DOT_IMAGE_FORMAT = png or svg - DOT_CLEANUP = YES or NO - -d plantuml - -d time - -d extcmd
* PLANTUML_RUN_JAVA_ONCE is working well. But some specific plantuml has ↵Charles.Lee2018-08-291-2/+4
| | | | error on ver 1.8.15
* add format in writePlantUMLSource() and gathered in one pu file. But it is ↵Charles.Lee2018-08-281-19/+222
| | | | not final
* source arrangementCharles.Lee2018-08-271-11/+1
|
* Imporvement of performance : Reduce the Java running countCharles.Lee2018-08-271-12/+226
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # What is it - #6465 is the first reqeust. So I followed up the albert advice. - in case of debug you use printf statements, I think that here there better options would be - create an -d flag (e.g. -d plantuml) that gives the information, so no need for using the configuration option - Follow up : create -d plantuml [debug.h, debug.cpp] - usage of printf - printf should not be used,all output is steered over calls to routines as defined in message.cpp, - Follow up : use Debug::Print(Debug::Plantuml, ... and msg() - usage of std::string / std::map - in doxygen the string manipulation is. mostly, done by means of Qt classes (e.g. classes QCString, QString). For consistency these classes should be used. - map manipulation is also done by means of Qt classes (dictionary and list classes) - Follow up : use QDict QList QCString [plantuml.h, plantuml.cpp] - dirent / opendir /readdir - when browsing through directories the routines line readFileOrDirectory should probably be used or the techniques used in this routine - Follow up : I will follow when I try to reduce redundancy of creating plantuml image. - Run java minimally - Test Case : 4 plantuml - Original Run without PLANTUML_RUN_JAVA_ONCE - 8.2 sec = 4 times * ( 1.6(java vm) + 0.1 * 1(load multiple file) + process each plantuml (0.35) *1 ) <- prediction - New with PLANTUML_RUN_JAVA_ONCE - 3.499 sec = 1.6(java vm) + 0.1 * 4(load multiple file) + process each plantuml (0.35) *4 <- prediction - Creating Java Virtual Machine has a big portion. - Result - Improving Performance : 8.2 -> 3.499 (in case of 4 plantuml) # Configuration - add configuration value in Doxyfile - PLANTUML_RUN_JAVA_ONCE = YES # Debugging - doxygen -d plantuml - doxygen -d time -d plantuml # Tested with following options - source code of 3 plantuml - PLANTUML_RUN_JAVA_ONCE = YES or NO - DOT_IMAGE_FORMAT = png or svg - DOT_CLEANUP = YES or NO - -d plantuml
* Bug fix for plantumlCharles.Lee2018-08-191-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # What is the problem - The following plantuml is not processed. ``` /** * @brief Clear the rule. * @startuml * participant CReceiver * opt MsgFromSender() * alt cmd=IGN_STATUS_IN && value == 0 * alt * CReceiver ->> CHmi : Draw_HMI sendMsg() -> sendMessage(HMI,MSGIDN,...) * else * note right CReceiver : Draw Directly * end * else * note right CReceiver : mbBlockDraw = false * end * end * @enduml */ ``` # debugging method - change into DOT_CLEANUP = NO in Doxyfile to remain the plantuml file for debugging. - the following context is result of remaining plantuml file. ``` @startuml participant CReceiver opt MsgFromSender() alt cmd=IGN_STATUS_IN && value == 0 alt CReceiver ->> CHmi : Draw_HMI sendMsg() -> sendMessage(HMI,MSGIDN,...) else note right CReceiver : Draw Directly end else note right CReceiver : mbBlockDraw = false end end@enduml ``` # Solution - add return in front of @enduml
* Bug 792449 - markdown plantuml use of graphviz fail if plantuml work i code filealbert-github2018-06-121-1/+3
| | | | Added the commandExtension as required by plantuml in case the path is given.
* Provide dot path to plantumlRemko van der Vossen2017-10-231-0/+7
| | | | If HAVE_DOT = YES and DOT_PATH is configured, pass the path to the dot executable to plantuml with the -graphvizdot option.
* Fix plantuml generation issueAnders Wallander2016-10-191-2/+7
| | | | | | | | | | | Commit 62f09103b77b9e5b4093d248563e2f9d76b65728 which merged pull request 538 introduced a bug in the generation of plantuml diagrams for other plantuml sources than the htmldocvisitor. In the previous commit the baseName argument was wrongly interpreted as file name without path. This commit fix this issue so the behaviour should be the same as before, while still also having the support for PlantUML diagrams in Qt compressed help files.
* Adds plantuml support Qt compressed help fileAnders Wallander2016-10-181-5/+10
| | | | | | | | | | Plantuml generated diagrams will be included in the index.qcp file which defines what files to include in the Qt compressed help file. This means that plantuml diagrams will work in the Qt creator help viewer. Signed-off-by: Anders Wallander <anders.wallander@volvocars.com>
* Fix for PlantUML configurationDennis Allerkamp2016-09-241-1/+1
| | | | Only if PlantUML configuration file is configured, then it will be passed as an argument to plantuml.jar.
* Option for PlantUML configuration fileDennis Allerkamp2016-09-031-0/+7
|
* Revert #291Douman2016-07-061-1/+1
| | | | See http://plantuml.com/salt.html for example HOW it supposed to work
* Changed configuration mechanism to directly access options in order to ↵Dimitri van Heesch2016-01-171-4/+4
| | | | improve performance
* Bug 759622 - problems with charset using plantumlDimitri van Heesch2015-12-201-1/+1
|
* Bug 751755 - using plantuml cause a popup "openwith" windows when calling ↵Dimitri van Heesch2015-09-211-1/+1
| | | | java.exe
* Bump copyright yearDimitri van Heesch2015-02-261-1/+1
|
* Remove the new line after @startuml in generated pu filebyzheng2015-01-141-1/+1
| | | Try to fix this problem for me: http://sourceforge.net/p/doxygen/mailman/message/33228212/
* Fixed to small memory leaksDimitri van Heesch2014-09-281-1/+1
|
* Merge pull request #226 from albert-github/feature/plantuml_includeDimitri van Heesch2014-09-161-1/+18
|\ | | | | Support plantuml !include statement
| * Support plantuml !include statementalbert-github2014-09-071-1/+18
| | | | | | | | Support the plantuml !include statement by using the newly defined PLANTUML_INCLUDE_PATH
* | Merge pull request #225 from albert-github/feature/plantuml_charsetDimitri van Heesch2014-09-161-0/+1
|\ \ | | | | | | Support charset option for PlantUML
| * | Support charset option for PlantUNLalbert-github2014-09-071-0/+1
| |/ | | | | | | Use as charset for PlantUML the same character set as de INPUT_ENCODING of the input source
* | Bug 735198 - plantUML requires epstopdf for building PDF filesalbert-github2014-09-071-1/+12
|/ | | | Added conversion from eps to pdf, analogous to dia and msc
* Bug 735591 - [PATCH] Provide exit code in case generatePlantUMLOutput failsDimitri van Heesch2014-08-301-2/+2
|
* Bug 731947 - Support for PlantUMLDimitri van Heesch2014-08-101-0/+97