If the code called by DoxygenParser::parse does not behave correctly,
it may move the iterator m_tokenListIt past the value endParsingIndex.
This was not caught by the previous checks and could lead to
dereferencing an invalid m_tokenListIt iterator value (and segfault).
This is now protected against by using a less than check in the while
loop instead of not equals. A warning is also printed if
endParsingIndex is exceeded.
Fix how end of paragraph is identified when parsing \code and
\verbatim blocks that appear within a paragraph and contain an empty
line. Previously this would generate a warning for unexpected end of
doxygen comments, and it could generate a segfault due to
dereferencing an invalid iterator value.
The doxygen_basic_translate.i and doxygen_basic_translate_style2.i
tests have been updated to serve as regression tests for this
behavior. Prior to this fix, inclusion of the empty code block line
in this context produced a segfault.
* doxy/space:
Ensure empty line before code and math blocks in doxygen pydoc
Remove extra newline before code block in doxygen python output
Clarify python doxygen code block indentation handling
Cleanup of pydoc translator newline trimming
Correction to recently added doxygen python test case
Adjust expected python output for doxygen style2 test
Adding test for second doxygen comment style
Fix bug in doxygen python code block indent
Eliminate extra newlines around doxygen python block math
Eliminate extra newlines in doxygen python \verbatim blocks
Remove extra newline from end of doxygen python \code command
Remove extra newline in beginning of doxygen python \code command
Fix python doxygen indentation for inline \code command
Done in order to be C++17 compliant as it uses std::unexpected_handler
which was removed in C++17. This class was intended for director
exception handling but was never used by SWIG and was never documented.
Closes#1538
Fixes:
Undefined symbols for architecture x86_64: "___cxa_deleted_virtual"
which clang issues when a class deletes a method (seems to be when the
function is not one of the compiler's automatically added special member
functions).
'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior [-Werror,-Wconstexpr-not-const]
Sphinx requires an empty line before code and math blocks, whereas
doxygen does not. This update ensures that a blank line is included
before generated code and math blocks in the pydoc output. This is
done by post-processing the docstring line by line to check whether
any newlines need to be added. This way, if the original doxygen
source already includes an empty line before a block, an additional
unnecessary empty line is not added.
Updating the expected test output for doxygen_basic_translate, which
now adds the necessary empty line before the code block. Adding
further test cases to doxygen_translate_all_tags to explicitly verify
that a newline is added in the pydoc output before both code and math
blocks that appear within a paragraph.
Additionally, empty lines previously appearing at the beginning of the
generated docstrings are now removed. This does not alter the
behavior of the tests.
cpp11_rvalue_reference3_wrap.cxx:256:38: warning: binding reference member 'member_rvalue_ref_ptr1' to
a temporary value [-Wdangling-field]
Thing *&& member_rvalue_ref_ptr1 = 0;
^
Remove a newline character that was added to the translated comments
prior to the code block. This way the structure of the pydoc output
more closely resembles that of the original doxygen comments.
Updating tests accordingly.
The _runme.py code for the recently added test case was using
references to an old module name for the test case, which was later
changed but not updated in the runme file.
Observed that with this second comment style, there is no line break
after the function overload headings in the translated
comments. Updating the test results accordingly.
This style looks like:
/** Line 1
* Line 2
*/
This is needed to verify fixes to some of the indentation in the
translated comments.
The test is copied from doxygen_basic_translate.i. One adjustment was
made to change the comment style on the last function that left out
the intermediate "*" characters. This does not produce correct output
when combined with this style of starting the text on the first
comment line.
Test results are copied directly from doxygen_basic_translate. A
minor difference in the Python results will be updated in a subsequent
commit.
If a certain doxygen comment style was used that included an
additional space, then translated Python comment code block indent was
not correct (it included the extra space). This doxygen comment style
was not previously represented in the test cases; a new test case will
be added in a subsequent commit.
Eliminate extra leading and trailing newlines around the \f[ and \f{
block math commands for doxygen comment translation for python.
Update tests accordingly.
If \code is used as a block command (probably the main use case), an
extra newline was included in the translated Python comments. This is
now removed and doxygen python test case output updated.
If \code was used inline, it produced an extra indent versus block
usage. This extra indent was also stored in the test output. This
update resolves this by simply removing a space that was being added
unnecessarily in handleTagVerbatim. Updating test case output
accordingly.
- Keep testing Octave 4.0 on Xenial, but the Octave headers break the C++11
tests, so just test C++98.
- Drop Octave 4.2 testing on Trusty.
- Keep Octave 4.4 testing on Trusty - it is the only C++11 Octave testing
done and is just fast enough to beat the 50 minute limit.
- Add latest Octave version (5.1) testing by using MacOS and brew. It takes
about 49 minutes to run for C++98 testing.
Unfortunately it takes longer than the Travis 50 minute limit to test C++11.
I can't find a Xenial or MacOS solution for testing Octave and C++11, so we'll
keep it on Travis for now. Octave is available as a Flatpak's, but Flatpak
doesn't work on Travis as it requires a reboot after installing the flatpak
package.
There were (a few) failures using 1.8.7, so document 1.9 and later as
working in SWIG 4.0.
Trusty failure in 2.3.0 was fixed in later versions of Ruby 2.3.x
(expansion of RARRAY_PTR).
This PR removes the closing `?>` PHP tag from generated files. [PSR-2](https://www.php-fig.org/psr/psr-2/) states:
> The closing `?>` tag MUST be omitted from files containing only PHP.
A problem might occur if files with any character after the closing tag are used with `include` or `require`. It might trigger an output and disallow HTTP header manipulation. See the popular [_headers already sent_](https://stackoverflow.com/a/8028987/1847340) debate on SO.
The default Go 1.11 version on Travis doesn't work with C++11/C++14:
gcc_libinit.c:110:3: error: implicit declaration of function ‘nanosleep’
so switch to another gimme version of Go.