| Padre-Plugin-HTMLExport documentation | Contained in the Padre-Plugin-HTMLExport distribution. |
Padre::Plugin::HTMLExport - Export highlighted HTML in Padre
version 0.09
$>padre Plugins -> Export Colorful HTML -> Export HTML Configure Color
Export a HTML page by using Syntax::Highlight::Engine::Kate
This software is copyright (c) 2010 by Fayland Lam.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Padre-Plugin-HTMLExport documentation | Contained in the Padre-Plugin-HTMLExport distribution. |
package Padre::Plugin::HTMLExport; BEGIN { $Padre::Plugin::HTMLExport::VERSION = '0.09'; } # ABSTRACT: Export highlighted HTML in Padre use 5.008005; use warnings; use strict; use File::Basename (); use base 'Padre::Plugin'; use Padre::Wx (); use Wx::Locale qw(:default); our %KATE_ALL = ( 'text/x-adasrc' => 'Ada', 'text/asm' => 'Asm6502', 'text/x-c++src' => 'Cplusplus', 'text/css' => 'CSS', 'text/x-patch' => 'Diff', 'text/eiffel' => 'Eiffel', 'text/x-fortran' => 'Fortran', 'text/html' => 'HTML', 'text/ecmascript' => 'JavaScript', 'text/latex' => 'LaTeX', 'text/lisp' => 'Common_Lisp', 'text/lua' => 'Lua', 'text/x-makefile' => 'Makefile', 'text/matlab' => 'Matlab', 'text/x-pascal' => 'Pascal', 'application/x-perl' => 'Perl', 'text/x-python' => 'Python', 'application/x-php' => 'PHP_PHP', 'application/x-ruby' => 'Ruby', 'text/x-sql' => 'SQL', 'text/x-tcl' => 'Tcl_Tk', 'text/vbscript' => 'JavaScript', 'text/xml' => 'XML', ); sub padre_interfaces { 'Padre::Plugin' => '0.47',; } sub menu_plugins_simple { my $self = shift; return ( Wx::gettext('Export Colorful HTML') => [ Wx::gettext('Export HTML...'), sub { $self->export_html }, Wx::gettext('Configure Color'), sub { $self->plugin_preferences }, ] ); } sub export_html { my ($self) = @_; my $main = $self->main; my $doc = $main->current->document or return; my $current = $doc->filename; my $default_dir; if ( defined $current ) { $default_dir = File::Basename::dirname($current); } # ask where to save my $save_to_file; while (1) { my $dialog = Wx::FileDialog->new( $main, Wx::gettext('Save as HTML...'), $default_dir, '', '*.html', Wx::wxFD_SAVE, ); if ( $dialog->ShowModal == Wx::wxID_CANCEL ) { return 0; } my $filename = $dialog->GetFilename; $default_dir = $dialog->GetDirectory; my $path = File::Spec->catfile( $default_dir, $filename ); if ( -e $path ) { my $res = Wx::MessageBox( Wx::gettext('File already exists. Overwrite it?'), Wx::gettext('Exist'), Wx::wxYES_NO, $main, ); if ( $res == Wx::wxYES ) { $save_to_file = $path; last; } } else { $save_to_file = $path; last; } } # highlight my $mimetype = $doc->mimetype; unless ( exists $KATE_ALL{$mimetype} ) { $main->error( sprintf( gettext('%s is not supported'), $mimetype ) ); return; } my $language = $KATE_ALL{$mimetype}; require Syntax::Highlight::Engine::Kate; my $hl = Syntax::Highlight::Engine::Kate->new( language => $language, substitutions => { "<" => "<", ">" => ">", "&" => "&", " " => " ", "\t" => " ", "\n" => "<BR>\n", }, format_table => { Alert => [ "<font color=\"#0000ff\">", "</font>" ], BaseN => [ "<font color=\"#007f00\">", "</font>" ], BString => [ "<font color=\"#c9a7ff\">", "</font>" ], Char => [ "<font color=\"#ff00ff\">", "</font>" ], Comment => [ "<font color=\"#7f7f7f\"><i>", "</i></font>" ], DataType => [ "<font color=\"#0000ff\">", "</font>" ], DecVal => [ "<font color=\"#00007f\">", "</font>" ], Error => [ "<font color=\"#ff0000\"><b><i>", "</i></b></font>" ], Float => [ "<font color=\"#00007f\">", "</font>" ], Function => [ "<font color=\"#007f00\">", "</font>" ], IString => [ "<font color=\"#ff0000\">", "" ], Keyword => [ "<b>", "</b>" ], Normal => [ "", "" ], Operator => [ "<font color=\"#ffa500\">", "</font>" ], Others => [ "<font color=\"#b03060\">", "</font>" ], RegionMarker => [ "<font color=\"#96b9ff\"><i>", "</i></font>" ], Reserved => [ "<font color=\"#9b30ff\"><b>", "</b></font>" ], String => [ "<font color=\"#ff0000\">", "</font>" ], Variable => [ "<font color=\"#0000ff\"><b>", "</b></font>" ], Warning => [ "<font color=\"#0000ff\"><b><i>", "</b></i></font>" ], }, ); my $title = 'Highlight ' . $doc->filename . ' By Padre::Plugin::HTML::Export'; my $code = $doc->text_get; my $output = "<html>\n<head>\n<title>$title</title>\n</head>\n<body>\n"; $output .= $hl->highlightText($code); $output .= "</body>\n</html>\n"; open( my $fh, '>', $save_to_file ); print $fh $output; close($fh); my $ret = Wx::MessageBox( sprintf( Wx::gettext('Saved to %s. Do you want to open it now?'), $save_to_file ), Wx::gettext('Done'), Wx::wxYES_NO | Wx::wxCENTRE, $main, ); if ( $ret == Wx::wxYES ) { Wx::LaunchDefaultBrowser($save_to_file); } } sub plugin_preferences { my ($self) = @_; my $main = $self->main; $main->error( Wx::gettext('Not implemented, TODO') ); } 1;
__END__