NAME
Wx::Perl::PodRichText -- POD in a RichTextCtrl
SYNOPSIS
use Wx::Perl::PodRichText;
my $podtextwidget = Wx::Perl::PodRichText->new;
$podtextwidget->goto_pod (module => 'Foo::Bar');
CLASS HIERARCHY
Wx::Perl::PodBrowser is a subclass of Wx::RichTextCtrl.
Wx::Object
Wx::EvtHandler
Wx::Validator
Wx::Control
Wx::TextCtrlBase
Wx::RichTextCtrl
Wx::Perl::PodRichText
DESCRIPTION
Wx::Perl::PodBrowser is a Wx::RichTextCtrl subclass for read-only display of formatted POD documents. The POD can be from .pod or .pm files or parsed from a file handle or a string.
See Wx::Perl::PodBrowser for a whole toplevel browser window.
Details
The initial widget SetSize() is a sensible size for POD, currently about 80 columns by 30 lines of the default font. A parent widget can make it bigger or smaller as desired.
The POD to text conversion tries to use RichText features.
Indentation uses left indent so text paragraphs flow within
=overetc.=itembullet points are RichText bullet paragraphs. Numbered=itemare RichText numbered paragraphs.In Wx circa 2.8.12, numbered paragraphs with big numbers seem to display with the text overlapping the number, but that should be a Wx problem and small numbers are not affected.
Verbatim paragraphs are in
wxFONTFAMILY_TELETYPEandwxRichTextLineBreakCharfor newline line breaks. Wraparound is avoided by a large negative right indent.Alas there's no scroll bar or visual indication of more text off to the right, but avoiding wraparound helps tables and ascii art.
L<>links to URLs are underlined and buttonized with the "URL" style.L<>links to POD likewise with apod://pseudo-URL. Ispod:L a good idea? It won't be usable by anything else, but the attribute is a handy place to hold the link destination.The current code has an
EVT_TEXT_URL()handler going to target POD orWx::LaunchDefaultBrowser()for URLs. But that might change, as it might be better to leave that to the browser parent if some applications wanted to display only a single POD.S<>non-breaking text uses 0xA0 non-breaking spaces to prevent word wrapping. But Wx will still break a non-breaking run which is wider than the widget width, rather than letting it disappear off the right edge.
The display is reckoned as text so POD =begin text sections are included in the display. Other =begin types are ignored. All =for are ignored.
Reading a large POD file is slow. The work is done piece-wise from the event loop so the rest of the application runs, but expect noticeable lag.
FUNCTIONS
$podtextwidget = Wx::Perl::PodRichText->new ($parent)$podtextwidget = Wx::Perl::PodRichText->new ($parent,$id)-
Create and return a new PodRichText widget in
$parent. If$idis not given thenwxID_ANYis used to have wxWidgets choose an ID number. $podtextwidget->goto_pod (key => value, ...)-
Go to a specified POD module, filename, section etc. The key/value options are
module => $str module etc in @INC filename => $str file name filehandle => $fh string => $str POD marked-up text guess => $str module or filename section => $string line => $integer line number heading_num => $n heading numberThe target POD document is given by one of
module,filename, etc.moduleis sought with Pod::Find in the usual@INCpath.stringis POD in a string.$podtextwidget->goto_pod (module => "perlpodspec");guesstries a module or filename. It's intended for command line or similar loose input to let the user enter either module or filename.Optional
section,lineorheading_numis a position within the document. They can be given alone to move in the currently displayed document.# move within current display $podtextwidget->goto_pod (section => "DESCRIPTION");sectionis a heading per=heador a item per=item. The first word from an=itemworks too, as is common for the POD formatters and helps cross-references to perlfunc and similar.heading_numgoes to a heading numbered consecutively starting from 0 for the first=head, as per theget_heading_list(). Going by number ensures any heading can be reached even when names might be duplicated. $podtextwidget->reload ()-
Re-read the current
moduleorfilenamesource. $bool = $podtextwidget->can_reload ()-
Return true if the current POD is from a
moduleorfilenamesource and therefore suitable for areload().
Content Methods
POD is parsed progressively under a timer and the following methods return information only on as much as parsed so far.
@strings = $podtextwidget->get_heading_list ()-
Return a list of the
=headheadings in the displayed document.Markup in the headings is not included in the return, just the plain text (with
E<>escapes as characters, andS<>non-breaking spaces as 0xA0). $charpos = $podtextwidget->get_section_position ($section)-
Return the character position of
$section. The position is perSetInsertionPoint()etc so 0 is the start of the document.$sectionis a heading or item as described above for thesectionoption ofgoto_pod(). If there is no such$sectionthen returnundef.If there are multiple headings or items with the same name then the return is the first one of them.
BUGS
As of wxWidgets circa 2.8.12 calling new() without a $parent causes a segfault. This is the same as Wx::RichTextCtrl->new() called without a parent. Is it good enough to let Wx::RichTextCtrl->new() do any necessary undef argument checking?
SEE ALSO
Wx, Wx::Perl::PodBrowser, Pod::Find
HOME PAGE
http://user42.tuxfamily.org/wx-perl-podbrowser/index.html
LICENSE
Copyright 2012, 2013, 2014, 2017 Kevin Ryde
Wx-Perl-PodBrowser is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
Wx-Perl-PodBrowser is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with Wx-Perl-PodBrowser. If not, see http://www.gnu.org/licenses/.