The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.

PLATFORMS

At the moment, Linux (Ubuntu) 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 Ubuntu, you need to install the following via:

        sudo apt-get install libwxbase2.8-0 libwxgtk2.8-0 libwxbase2.8-dev libgtk2.0-dev

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.