| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|\
| |
| | |
Plantuml has problems with output directories ending with directory separator
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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.
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
namespace
Fixing some memory issues caused by not correctly freed pointers
|
| |
|
|\
| |
| |
| | |
https://github.com/cheoljoo/doxygen into cheoljoo-run_java_once_3rd_trial
|
| |
| |
| |
| |
| |
| | |
- 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)
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
# 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
```
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- 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
|
|/ |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
# 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
|
|
|
|
| |
error on ver 1.8.15
|
|
|
|
| |
not final
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
# 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
# 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
|
|
|
|
| |
Added the commandExtension as required by plantuml in case the path is given.
|
|
|
|
| |
If HAVE_DOT = YES and DOT_PATH is configured, pass the path to the dot executable to plantuml with the -graphvizdot option.
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
| |
Only if PlantUML configuration file is configured, then it will be passed as an argument to plantuml.jar.
|
| |
|
|
|
|
| |
See http://plantuml.com/salt.html for example HOW it supposed to work
|
|
|
|
| |
improve performance
|
| |
|
|
|
|
| |
java.exe
|
| |
|
|
|
| |
Try to fix this problem for me: http://sourceforge.net/p/doxygen/mailman/message/33228212/
|
| |
|
|\
| |
| | |
Support plantuml !include statement
|
| |
| |
| |
| | |
Support the plantuml !include statement by using the newly defined PLANTUML_INCLUDE_PATH
|
|\ \
| | |
| | | |
Support charset option for PlantUML
|
| |/
| |
| |
| | |
Use as charset for PlantUML the same character set as de INPUT_ENCODING of the input source
|
|/
|
|
| |
Added conversion from eps to pdf, analogous to dia and msc
|
| |
|
|
|