NAME
Wx::Scintilla - Fresh Perl wxWidgets XS bindings for Scintilla editor component
SYNOPSIS
#----> My first scintilla Wx editor :)
package My::Scintilla::Editor;
use strict;
use warnings;
# Load Wx::Scintilla
use Wx::Scintilla (); # replaces use Wx::STC
use base 'Wx::ScintillaTextCtrl'; # replaces Wx::StyledTextCtrl
use Wx qw(:everything);
use Wx::Event;
# Override the constructor to Enable Perl support in the editor
sub new {
my ( $class, $parent ) = @_;
my $self = $class->SUPER::new( $parent, -1, [ -1, -1 ], [ 750, 700 ] );
# Set the font
my $font = Wx::Font->new( 10, wxTELETYPE, wxNORMAL, wxNORMAL );
$self->SetFont($font);
$self->StyleSetFont( wxSTC_STYLE_DEFAULT, $font );
$self->StyleClearAll();
# Set the various Perl lexer colors
$self->StyleSetForeground( 0, Wx::Colour->new( 0x00, 0x00, 0x7f ) );
$self->StyleSetForeground( 1, Wx::Colour->new( 0xff, 0x00, 0x00 ) );
$self->StyleSetForeground( 2, Wx::Colour->new( 0x00, 0x7f, 0x00 ) );
$self->StyleSetForeground( 3, Wx::Colour->new( 0x7f, 0x7f, 0x7f ) );
$self->StyleSetForeground( 4, Wx::Colour->new( 0x00, 0x7f, 0x7f ) );
$self->StyleSetForeground( 5, Wx::Colour->new( 0x00, 0x00, 0x7f ) );
$self->StyleSetForeground( 6, Wx::Colour->new( 0xff, 0x7f, 0x00 ) );
$self->StyleSetForeground( 7, Wx::Colour->new( 0x7f, 0x00, 0x7f ) );
$self->StyleSetForeground( 8, Wx::Colour->new( 0x00, 0x00, 0x00 ) );
$self->StyleSetForeground( 9, Wx::Colour->new( 0x7f, 0x7f, 0x7f ) );
$self->StyleSetForeground( 10, Wx::Colour->new( 0x00, 0x00, 0x7f ) );
$self->StyleSetForeground( 11, Wx::Colour->new( 0x00, 0x00, 0xff ) );
$self->StyleSetForeground( 12, Wx::Colour->new( 0x7f, 0x00, 0x7f ) );
$self->StyleSetForeground( 13, Wx::Colour->new( 0x40, 0x80, 0xff ) );
$self->StyleSetForeground( 17, Wx::Colour->new( 0xff, 0x00, 0x7f ) );
$self->StyleSetForeground( 18, Wx::Colour->new( 0x7f, 0x7f, 0x00 ) );
$self->StyleSetBold( 12, 1 );
$self->StyleSetSpec( wxSTC_H_TAG, "fore:#0000ff" );
# set the lexer to Perl 5
$self->SetLexer(wxSTC_LEX_PERL);
return $self;
}
#----> DEMO EDITOR APPLICATION
# First, define an application object class to encapsulate the application itself
package DemoEditorApp;
use strict;
use warnings;
use Wx;
use base 'Wx::App';
# We must override OnInit to build the window
sub OnInit {
my $self = shift;
my $frame = Wx::Frame->new(
undef, # no parent window
-1, # no window id
'My First Scintilla Editor!', # Window title
);
my $editor = My::Scintilla::Editor->new(
$frame, # Parent window
);
$frame->Show(1);
return 1;
}
# Create the application object, and pass control to it.
package main;
my $app = DemoEditorApp->new;
$app->MainLoop;
DESCRIPTION
While we already have a good scintilla editor component support via Wx::StyledTextCtrl in Perl, we already suffer from an older scintilla package and thus lagging Perl support in the popular Wx Scintilla component. wxWidgets http://wxwidgets.org has a *very slow* release timeline. Scintilla is a contributed project which means it will not be the latest by the time a new wxWidgets distribution is released. And on the scintilla front, the Perl 5 lexer is not 100% bug free even and we do not have any kind of Perl 6 support in Scintilla.
The ambitious goal of this project is to provide fresh Perl 5 and maybe 6 support in Wx while preserving compatibility with Wx::StyledTextCtrl and continually contribute it back to Scintilla project.
SUPPORTED PLATFORMS
At the moment, Win32 on strawberry is a supported platform. My next goal is to support Ubuntu and then finally MacOS, i wish :)
HISTORY
wxWidgets 2.9.1 and trunk has 2.03 so far. I searched for Perl lexer changes in scintilla history and here is what we will be getting when we upgrade to 2.20+
- Release 2.26
-
Perl folding folds "here doc"s and adds options fold.perl.at.else and fold.perl.comment.explicit. Fold structure for Perl fixed.
- Release 2.20
-
Perl folder works for array blocks, adjacent package statements, nested PODs, and terminates package folding at DATA, D and Z.
- Release 1.79
-
Perl lexer bug fixed where previous lexical states persisted causing "/" special case styling and subroutine prototype styling to not be correct.
- Release 1.78
-
Perl lexer fixes problem with string matching caused by line endings.
- Release 1.77
-
Perl lexer update.
- Release 1.76
-
Perl lexer handles defined-or operator "".
- Release 1.75
-
Perl lexer enhanced for handling minus-prefixed barewords, underscores in numeric literals and vector/version strings, D and Z similar to END, subroutine prototypes as a new lexical class, formats and format blocks as new lexical classes, and '/' suffixed keywords and barewords.
- Release 1.71
-
Perl lexer allows UTF-8 identifiers and has some other small improvements.
ACKNOWLEDGEMENTS
Gabor Szabo http://szabgab.com for the idea to backport Perl lexer for wxWidgets 2.8.10 http://padre.perlide.org/trac/ticket/257 and all of #padre members for the continuous support and testing. Thanks!
Robin Dunn http://alldunn.com/robin/ for the excellent scintilla contribution that he made to wxWidgets. This work is based on his codebase. Thanks!
SUPPORT
Bugs should always be submitted via the CPAN bug tracker
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Wx-Scintilla
For other issues, contact the maintainer.
AUTHOR
Ahmad M. Zawawi <ahmad.zawawi@gmail.com>
SEE ALSO
wxStyledTextCtrl Documentation http://www.yellowbrain.com/stc/index.html
Scintilla edit control for Win32::GUI Win32::GUI::Scintilla
COPYRIGHT
Copyright 2011 Ahmad M. Zawawi.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.