logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Wx::Scintilla - Scintilla source code editing component for wxWidgets

Acknowledgements

       Neil Hudgson for creating and maintaining the excellent Scintilla project <http://scintilla.org>. 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!

       Mark dootson <http://search.cpan.org/~mdootson/> for his big effort to make Wx::Scintilla  compilable  on
       various platforms. Big thanks!

       Heiko  Jansen  and  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!

Author

       Ahmad M. Zawawi <ahmad.zawawi@gmail.com>

       Mark Dootson <http://www.wxperl.co.uk>

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.

       Note: You cannot load Wx::STC and Wx::Scintilla in the same application. They are mutually exclusive. The
       wxSTC_... events are handled by one library or the other.

       Scintilla 2.28 is now bundled and enabled by default.

History

       wxWidgets 2.9.1 and development have Scintilla 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.26+.

       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.

Manual

       If you are looking for more API documentation, please consult Wx::Scintilla::Manual

Name

       Wx::Scintilla - Scintilla source code editing component for wxWidgets

Platforms

       At the moment, Linux (Debian, Ubuntu, Fedora, CentOS) and Windows (Strawberry and ActivePerl)  are
       supported platforms. My next goal is to support more platforms. Please let me know if you can help out :)

       On Debian/Ubuntu, you need to install the following via:

           sudo apt-get install libgtk2.0-dev

       On MacOS 64-bit by default you need to install a 32-bit Perl in order to install wxWidgets 2.8.x. Please
       refer to <http://wiki.wxperl.info/w/index.php/Mac_OS_X_Platform_Notes> for more information.

See Also

       Wx::Scintilla Manual Wx::Scintilla::Manual

       wxStyledTextCtrl Documentation <http://www.yellowbrain.com/stc/index.html>

       Scintilla edit control for Win32::GUI Win32::GUI::Scintilla

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.

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::Scintilla::TextCtrl';    # 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( Wx::Scintilla::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( Wx::Scintilla::SCE_H_TAG, "fore:#0000ff" );

               # set the lexer to Perl 5
               $self->SetLexer(Wx::Scintilla::SCLEX_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;

See Also