Create Richer Jupyter Notebooks with HTML from IDL 8.5.1
The IDL 8.5.1 hotfix that will be released in the near future contains not only bug fixes addressing issues in IDL 8.5.
It also includes some new functionality that might grab your attention.
In IDL 8.5 the Python bridge was introduced to allow IDL and Python to interoperate in a seamless way.
To enhance this functionality, the iPython notebook kernel was published at the same time. I discussed some trickery to insert graphics animations into a notebook in an earlier blog post.
With IDL 8.5.1 a new feature has been added to the Jupyter interface that allows an IDL programmer to inject HTML directly into a Jupyter web page.
This opens up a new world of creative opportunities for IDL users.
Previously, output to the Jupyter notebook from IDL could either be in the form of graphics as generated from IDL's Direct Graphics or IDLgrBuffer object or in the form of literal text output sent to the standard output stream via routines such as PRINT and HELP.
Any attempts to send HTML (such as <HTML></HTML>) through PRINT that is intended to be interpreted by the browser would be escaped somewhere along the route. The result would show string literals in the browser rather than the intended interpretation.
In IDL 8.5.1, a new parsing step has been added that will recognize the string "<html>" at the start of any standard output string and will short-circuit the step of escaping the characters, passing the literal directly to the browser. Lower character case is required for the tag.
Start a Jupyter IDL notebook, and enter
print, 'This is not a bold statement.'
print, '<html><em>But this is a bold statement.</em></html>'
Strings are not accumulated across multiple PRINT statements. Any single string written by a single PRINT that you intend to be treated as an HTML literal should be delimited by "<html>...</html>" tags.
The IDL and bridge string parsing do not perform any additional HTML validation and will not warn you of invalid syntax, though the target browser may when it attempts to interpret the string.