Padre-Plugin-SpellCheck-1.32/0002755000175000000500000000000012140566636014431 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/MYMETA.yml0000644000175000000500000000127412140566636016152 0ustar kevinsrc--- abstract: 'Check spelling in Padre, The Perl IDE.' author: - 'Kevin Dawson ' build_requires: ExtUtils::MakeMaker: 6.59 Test::More: 0.98 Test::Requires: 0.06 configure_requires: ExtUtils::MakeMaker: 0 dynamic_config: 0 generated_by: 'ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.130880' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: Padre-Plugin-SpellCheck no_index: directory: - t - inc requires: Class::Accessor: 0.34 Encode: 2.51 File::Which: 1.09 Padre: 0.98 Text::Hunspell: 2.08 Try::Tiny: 0.12 constant: 1.27 parent: 0.225 perl: 5.010001 version: 1.32 Padre-Plugin-SpellCheck-1.32/Changes0000644000175000000500000001071712140516621015715 0ustar kevinsrcRevision history for Padre-Plugin-SpellCheck 1.32 2013-05-02 - Update dependainces and bump version (BOWTIE) - Tweak tests to increase coverage (BOWTIE) 1.31_03 2013-01-14 - Tweak perl version dependancy and Makefile (BOWTIE) 1.31_02 2013-01-11 - Bumped perl dependancie to 5.12.5 as test 05-Checker.t was failing under perl 5.10.1 with Class::Accessor (BOWTIE) - Update Changes file to CPAN::Changes::Spec (BOWTIE) 1.31_01 2012-08-25 - Missing ellipsis on context menu (BOWTIE) - changed to dev version number until padre 0.98 is released (BOWTIE) 1.31 2012-08-23 - My Bad, forgot to add icon (BOWTIE) 1.30 2012-08-22 - update preferences to new Padre::Util::run_in_dir_two format (BOWTIE) - Add event_on_context_menu to enable changing preferences (BOWTIE) - Tweak tests for above (BOWTIE) 1.29 2012-06-19 - Typo in fbp (BOWTIE) - replacement text location slipping dod+ (BOWTIE) - remove unused variable (BOWTIE) - switch to Class::Accessor with 'antlers' (BOWTIE) 1.28 2012-06-15 - POD tweak for clarification dod+ (BOWTIE) - disable button when finished (BOWTIE) 1.27 2012-05-13 - fix hunspell selection, which was not and tweak POD (BOWTIE) 1.26 2012-05-13 - use v-string (BOWTIE) - update to next version number (BOWTIE) 1.25 2012-04-24 - dynamic Dialogue Titles (BOWTIE) - Update POD, remove test code (BOWTIE) - implement new plugin_disable (BOWTIE) - use Try::Tiny implement (BOWTIE) - moving to p-p-xx-yy for config, tides code and makes more consistent across plug-ins, Padre 0.96 compatible only (BOWTIE) - Tweak tests, add README (BOWTIE) 1.24 2012-02-26 - remove unwanted test for Text::Aspell installed (BOWTIE) 1.23 2012-02-26 - fix plugin_enable school boy error (BOWTIE) - fix the config DB to check on enable for past and new install (BOWTIE) - Bump version to 1.23 (BOWTIE) - added Text::Hunspell (BOWTIE) - Update Status info in Checker to show dictionary and language (ALIAS)(BOWTIE) - rename Method accessors to inc get/set (BOWTIE) - remove un-used Methods (BOWTIE) - add the standard License to the tail as and where (BOWTIE) 1.22 2012-02-22 - remove dead code in plugin_icon method (ZENOG) - Upgraded to use wxFormBuilder-based forms (BOWTIE) - revert-> Added missing Data::Printer dependency (AZAWAWI)<-(BOWTIE) - Access to Preferences is now via Plugin Manager (BOWTIE) - Preferences now displays language name rather than ISO code (BOWTIE) - use Padre Locale for dictionary names from ISO code (BOWTIE) - Start on adding some tests, as there are none (BOWTIE) - Preferences now shows and saves Aspell and Hunspell local dictionaries (BOWTIE) 1.21 2010-12-06 - Restored missing POT/PO translation sources (Damyan Ivanov, AZAWAWI) - rename method 'spell_preferences' to 'plugin_preferences', so that the dialogue can also be called from the plugin manager (ZENOG) - add support for some filters (XML, HTML, LaTeX) (ZENOG) - fix encoding information in German translation file: ASCII to UTF-8 #1070 (ZENOG) 1.2 2010-10-29 - Removed Test::NeedsDisplay dependency (AZAWAWI) 1.1.3 2010-10-27 - Compatibility with the latest Padre (ZENOG, AZAWAWI) - Added German translation (ZENOG) - Added Japanese translation (ISHIGAKI) - Fixed translations in share directory and removed old one(AZAWAWI) - Switched to Dist::Zilla (AZAWAWI) - t/00-load.t is magically injected by [@PadrePlugin] via [LoadTests] (AZAWAWI) 1.1.2 2009-06-20 - Add Chinese (Traditional) translation (bluet) - spanish translation added (brunov) - remove .po files from MANIFEST.SKIP, they are needed for Debian since they are the source for the .mo files (ryan52) - if the user selects one of the suggestions, replace it (ryan52) 1.1.1 2009-05-08 - work-around for unicode texts (therek) 1.1.0 2009-04-29 - possibility to choose dictionary language (but wx::stc has unicode bugs which prevents this feature to be really useful on non-ascii texts) - plugin i18n-ed, ready to accept translations - arabic translation added (azawawi) - brazilian portuguese translation added (garu) - french translation added - polish translation added (therek) 1.0.0 2009-04-22 - using a dedicated spellcheck dialog - on error, possibility to replace, replace all, ignore, ignore all 0.03 2009-04-05 - providing an icon for padre's plugin manager 0.02 2009-04-05 - adding newline between wrongly spelled words - changing maintainer - moving away from module::install - cleaning meta information 0.01 2009-02-01 - First version, released on an unsuspecting world. Padre-Plugin-SpellCheck-1.32/Padre-Plugin-SpellChecker.fbp0000644000175000000500000017273612015207010021744 0ustar kevinsrc C++ 1 source_name 0 UTF-8 connect 1000 none 0 Padre::Plugin::SpellChecker . 1 1 0 0 wxBOTH 1 1 impl_virtual 0 wxID_ANY Padre::Plugin::SpellCheck::FBP::Preferences wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Spelling preferences wxFILTER_NONE wxDefaultValidator bSizer1 wxVERTICAL none 5 wxALL|wxEXPAND 1 wxID_ANY Select Dictionary and Language sbSizer4 wxVERTICAL public 5 wxALL|wxEXPAND 0 "Aspell" "Hunspell" 1 1 0 wxID_ANY Dictionary 1 chosen_dictionary public 0 wxRA_SPECIFY_ROWS wxFILTER_NONE wxDefaultValidator on_dictionary_chosen 5 wxALL 0 1 1 0 wxID_ANY language public 0 220,-1 wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 0 1 0 0 0 0 1 0 m_sdbSizer1 protected _on_button_ok_clicked _on_button_save_clicked wxBOTH 1 1 impl_virtual 0 wxID_ANY Padre::Plugin::SpellCheck::FBP::Checker -1,-1 wxDEFAULT_DIALOG_STYLE Padre-Plugin-SpellCheck wxFILTER_NONE wxDefaultValidator -1,-1 bSizer1 wxHORIZONTAL none 5 wxALL|wxEXPAND 1 bSizer2 wxVERTICAL none 5 wxALL|wxEXPAND 0 -1,-1 bSizer21 wxVERTICAL none 5 wxALL|wxEXPAND 1 wxID_ANY Status Info. -1,-1 status_info wxHORIZONTAL public 5 wxALL|wxEXPAND 0 1 1 0 wxID_ANY Spell check finished: 124,-1 labeltext public wxFILTER_NONE wxDefaultValidator -1 5 wxALL|wxEXPAND 0 1 1 0 wxID_ANY Click Close 96,-1 label public wxFILTER_NONE wxDefaultValidator -1 5 wxALL|wxEXPAND 1 bSizer22 wxVERTICAL none 5 wxALL|wxEXPAND 1 wxID_ANY Suggestions sbSizer2 wxVERTICAL none 5 wxALL|wxEXPAND 1 1 1 0 wxID_ANY list public wxLC_LIST wxFILTER_NONE wxDefaultValidator _on_replace_clicked 5 wxALL|wxEXPAND 0 -1,-1 bSizer3 wxVERTICAL none 5 wxALL|wxEXPAND 0 1 0 0 0 wxID_ANY &Add to dictionary m_button1 protected wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 1 0 1 0 wxID_ANY &Replace replace public Replace the highlighted word in Padre Editor. with your selected word wxFILTER_NONE wxDefaultValidator _on_replace_clicked 5 wxALL|wxEXPAND 0 1 0 1 0 wxID_ANY R&eplace all replace_all public Same as Replace but also every future occurance in current Check wxFILTER_NONE wxDefaultValidator _on_replace_all_clicked 5 wxALL|wxEXPAND 0 1 0 1 0 wxID_ANY &Ignore ignore public Ignore the highlighted word in Padre Editor. wxFILTER_NONE wxDefaultValidator _on_ignore_clicked 5 wxALL|wxEXPAND 0 1 0 1 0 wxID_ANY I&gnore all ignore_all public Same as Ignore but also every future occurance in current Check wxFILTER_NONE wxDefaultValidator _on_ignore_all_clicked 5 wxALL|wxEXPAND 0 1 1 1 0 wxID_CANCEL &Close m_button6 protected wxFILTER_NONE wxDefaultValidator Padre-Plugin-SpellCheck-1.32/META.yml0000644000175000000500000000202012140566636015672 0ustar kevinsrc--- abstract: 'Check spelling in Padre, The Perl IDE.' author: - 'Kevin Dawson ' build_requires: ExtUtils::MakeMaker: 6.59 Test::More: 0.98 Test::Requires: 0.06 configure_requires: ExtUtils::MakeMaker: 6.59 distribution_type: module dynamic_config: 1 generated_by: 'Module::Install version 1.06' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 module_name: Padre::Plugin::SpellCheck name: Padre-Plugin-SpellCheck no_index: directory: - inc - share - t - xt recommends: Test::Pod: 1.46 Test::Pod::Coverage: 1.08 requires: Class::Accessor: 0.34 Encode: 2.51 File::Which: 1.09 Padre: 0.98 Text::Hunspell: 2.08 Try::Tiny: 0.12 constant: 1.27 parent: 0.225 perl: 5.10.1 resources: bugtracker: http://padre.perlide.org/trac homepage: http://padre.perlide.org/trac/wiki/PadrePluginSpellCheck license: http://dev.perl.org/licenses/ repository: http://svn.perlide.org/padre/trunk/Padre-Plugin-SpellCheck/ version: 1.32 Padre-Plugin-SpellCheck-1.32/README0000644000175000000500000000752612051764637015323 0ustar kevinsrcNAME Padre::Plugin::SpellCheck - Check spelling in Padre, The Perl IDE. VERSION version 1.31_01 DESCRIPTION For Padre 0.97+ This plug-in allows one to check there spelling within Padre using "F7" (standard spelling short-cut across text processors). One can change the dictionary language used (based upon install languages) in the preferences window via Plug-in Manager. Note that preferences can only be setup while the plugin is disabled. Preferences are persistent. You need to Save your preferred language. This plug-in is using "Text::Aspell" default (legacy). You can also use "Text::Hunspell", so check these module's pod for more information and install the one for you. Of course, you need to have the relevant Dictionary binary, dev and dictionary installed. SYNOPSIS Check your file or selected text for spelling errors in your preferred language. F7 PUBLIC METHODS Standard Padre::Plugin API "Padre::Plugin::SpellCheck" defines a plug-in which follows "Padre::Plugin" API. Refer to this module's documentation for more information. The following methods are implemented: clean_dialog() menu_plugins() padre_interfaces() plugin_disable() plugin_enable() Return the plug-in's configuration, or a suitable default one if none exist previously. plugin_name() plugin_preferences() Spelling preferences window normaly access via Plug-in Manager plugin_icon() Used by Plug-in Manager event_on_context_menu Add access to spelling preferences window. Spell checking methods * spell_check() Spell checks the current selection (or the whole document). BUGS and LIMITATIONS If you upgrade your os, and run Perl from a local/lib, you may find Hunspell stops showing local dictionary s in preferences, you will need to un-install Text::Hunspell and re-install in cpan. Spell-checking non-ascii files has bugs: the selection does not match the word boundaries, and as the spell checks moves further in the document, offsets are totally irrelevant. This is a bug in "Wx::StyledTextCtrl" that has some Unicode problems... So unfortunately, there's nothing that I can do in this plug-in to tackle this bug. Please report any bugs or feature requests to "padre-plugin-spellcheck at rt.cpan.org", or through the web interface at "/rt.cpan.org/NoAuth/ReportBug.html?Queue=Padre-Plugin- SpellCheck" in http:. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. SEE ALSO Plug-in icon courtesy of Mark James, at . * Padre-Plugin-SpellCheck web page * Our svn repository , and can be browsed at . You can also look for information on this module at: * AnnoCPAN: Annotated CPAN documentation * CPAN Ratings * Open bugs Everything Aspell related: . Everything Hunspell related: . AUTHORS Kevin Dawson Ahmad M. Zawawi Fayland Lam Jerome Quelin COPYRIGHT This software is copyright (c) 2010 by Fayland Lam, Jerome Quelin. LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/share/0002755000175000000500000000000012140566636015533 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/share/icons/0002755000175000000500000000000012140566636016646 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/share/icons/16x16/0002755000175000000500000000000012140566636017433 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/share/icons/16x16/spellcheck.png0000644000175000000500000000113312015457706022250 0ustar kevinsrc‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<íIDAT8Ëcøÿÿ?%˜*8õÚÌôâvĶﱎ÷šârͪÅl¦u«Ù.˜^¾f‰v–Új奙ÊqŠ31 iö˜ä¸Ë®ÛÊȦÃ"޲٬ȺÍüšnŽº¤q¥þ5œ.pw赞 Ô\bÓn>Ó²É$Þ¶ËòšY­á.íµ™jIJñÊñJ3Ñ5ŠåOç`ˆ<ËÊà>É~—]Õj m3Ý&Ù?ÚoP¤Ö ž¬²Z)ZÁS?GÅ ±çoÞ`ˆ ÅWOº/j^Ôœùƒ>ªfLbϳ½r>lí‹ÿ–süÏØøâÀÂÇÿ2/ßcÐÜ/ATRfð<© ÜzûOåŽWÿýæ?üÏzþ6ƒê^ ’òПENÓîÿgH>Aq·Y™‰Asoƒ,~ÍTÉá¥w}ÁF#TIEND®B`‚Padre-Plugin-SpellCheck-1.32/share/locale/0002755000175000000500000000000012140566636016772 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-pl.po0000644000175000000500000000414011614540674024703 0ustar kevinsrc# translation of SpellCheck-pl.po to # # Cezary Morga , 2009. msgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-30 07:18+0200\n" "PO-Revision-Date: 2009-05-10 20:42+0200\n" "Last-Translator: Cezary Morga \n" "Language-Team: Polish <>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: lib/Padre/Plugin/SpellCheck.pm:31 lib/Padre/Plugin/SpellCheck.pm:56 msgid "Spell check" msgstr "Sprawdzanie pisowni" #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Check spelling\tF7" msgstr "Sprawdź pisowniÄ™\tF7" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Preferences" msgstr "Ustawienia" #: lib/Padre/Plugin/SpellCheck.pm:80 msgid "No document opened." msgstr "Brak otwartego dokumentu." #: lib/Padre/Plugin/SpellCheck.pm:97 lib/Padre/Plugin/SpellCheck/Dialog.pm:292 msgid "Spell check finished." msgstr "Sprawdzanie pisowni zakoÅ„czone." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:43 #, perl-format msgid "Spelling (%s)" msgstr "Sprawdzanie pisowni (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:198 msgid "Add to dictionary" msgstr "Dodaj do sÅ‚ownika" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:199 msgid "Replace" msgstr "ZastÄ…p" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:200 msgid "Replace all" msgstr "ZastÄ…p wszystkie" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:201 msgid "Ignore" msgstr "Ignoruj" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:202 msgid "Ignore all" msgstr "Ignoruj wszystkie" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:203 msgid "Close" msgstr "Zamknij" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:233 msgid "Not in dictionary:" msgstr "Nieznane sÅ‚owo:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:255 msgid "Suggestions" msgstr "Podpowiedzi" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:36 msgid "Spelling preferences" msgstr "Ustawienia pisowni" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:136 msgid "Dictionary:" msgstr "SÅ‚ownik:" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-fr.po0000644000175000000500000000402011627761037024676 0ustar kevinsrcmsgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-06-20 09:01+0200\n" "PO-Revision-Date: \n" "Last-Translator: Jérôme Quelin \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" #: lib/Padre/Plugin/SpellCheck.pm:32 #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Spell check" msgstr "Vérification orthographique" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Check spelling\tF7" msgstr "Vérifier l'orthographe\tF7" #: lib/Padre/Plugin/SpellCheck.pm:59 msgid "Preferences" msgstr "Préférences" #: lib/Padre/Plugin/SpellCheck.pm:81 msgid "No document opened." msgstr "Aucun document ouvert." #: lib/Padre/Plugin/SpellCheck.pm:98 #: lib/Padre/Plugin/SpellCheck/Dialog.pm:303 msgid "Spell check finished." msgstr "Vérification orthographique terminée." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:47 #, perl-format msgid "Spelling (%s)" msgstr "Orthographe (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:208 msgid "Add to dictionary" msgstr "Ajouter au dictionnaire" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:209 msgid "Replace" msgstr "Remplacer" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:210 msgid "Replace all" msgstr "Toujours remplacer" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:211 msgid "Ignore" msgstr "Ignorer" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:212 msgid "Ignore all" msgstr "Toujours ignorer" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:213 msgid "Close" msgstr "Fermer" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:243 msgid "Not in dictionary:" msgstr "Pas dans le dictionnaire :" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:265 msgid "Suggestions" msgstr "Suggestions" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:39 msgid "Spelling preferences" msgstr "Préférences orthographiques" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:139 msgid "Dictionary:" msgstr "Dictionnaire :" #~ msgid "Spelling" #~ msgstr "Orthographe" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-zh-tw.po0000644000175000000500000000412311614540674025342 0ustar kevinsrc# Chinese translations for PACKAGE package. # Copyright (C) 2009 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # BlueT - Matthew Lien , 2009. # msgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-30 07:18+0200\n" "PO-Revision-Date: 2009-05-19 03:03+0800\n" "Last-Translator: BlueT - Matthew Lien - 練喆明 \n" "Language-Team: Chinese (traditional) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit" #: lib/Padre/Plugin/SpellCheck.pm:31 lib/Padre/Plugin/SpellCheck.pm:56 msgid "Spell check" msgstr "拼字檢查" #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Check spelling\tF7" msgstr "檢查拼字\tF7" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Preferences" msgstr "å好" #: lib/Padre/Plugin/SpellCheck.pm:80 msgid "No document opened." msgstr "沒有已開啟文件." #: lib/Padre/Plugin/SpellCheck.pm:97 lib/Padre/Plugin/SpellCheck/Dialog.pm:292 msgid "Spell check finished." msgstr "拼字檢查完æˆ." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:43 #, perl-format msgid "Spelling (%s)" msgstr "拼字中 (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:198 msgid "Add to dictionary" msgstr "加入字典" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:199 msgid "Replace" msgstr "å–代" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:200 msgid "Replace all" msgstr "全部å–代" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:201 msgid "Ignore" msgstr "忽略" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:202 msgid "Ignore all" msgstr "全部忽略" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:203 msgid "Close" msgstr "關閉" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:233 msgid "Not in dictionary:" msgstr "ä¸åœ¨å­—典中:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:255 msgid "Suggestions" msgstr "建議" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:36 msgid "Spelling preferences" msgstr "拼字å好" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:136 msgid "Dictionary:" msgstr "å­—å…¸:" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-ar.mo0000644000175000000500000000220511614541456024666 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì # 1P i t ‚+¡Íä ÷,BVtAdd to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-04-30 07:18+0200 PO-Revision-Date: Last-Translator: Ahmad M. Zawawi Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit اضاÙÙ‡ الى Ø§Ù„Ù…Ø¹Ø¬Ù…ÙØ­Øµ التهجئه F7اغلاقالمعجم:تجاهلتجاهل الكللا توجد أي وثيقة Ù…ÙØªÙˆØ­Ø©.ليس بالمعجم:الاعداداتتغييرتغيير الكلتمت التهجئهتمت التهجئهالتهجئه (%s)اعدادات التهجئهاقتراحاتPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-nl-nl.mo0000644000175000000500000000221511614541456025305 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì r €š± ¹Æ ÎÜó  /A ^l ‚Add to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-04-30 07:18+0200 PO-Revision-Date: Last-Translator: ddn Language-Team: ddn MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Dutch X-Poedit-Country: Nederland - België Toevoegen aan woordenboekControleer spelling F7SluitenWoordenboek:NegerenAlles negerenGeen document geopend.Niet in woordenboek:InstellingenVervangenAlles VervangenSpellingscontroleSpellingscontrole geëindigdSpelling (%s)Spelling instellingenSuggestiesPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-pt-br.mo0000644000175000000500000000221411614541456025310 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì H Vo‡ Ž› £±Ê ê ø%/Ue Add to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-04-30 07:18+0200 PO-Revision-Date: 2009-04-30 02:21-0300 Last-Translator: Breno G. de Oliveira Language-Team: Brazilian Portuguese MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adicionar ao dicionárioVerificar ortografia F7FecharDicionário:IgnorarIgnorar todasNenhum documento aberto.Não existentes no dicionário:PreferênciasSubstituirSubstituir todasVerificação ortográficaVerificação ortográfica conluída.Ortografia (%s)Preferências de ortografiaSugestõesPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-es-es.po0000644000175000000500000000366411614540674025316 0ustar kevinsrcmsgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-05-25 02:34+0800\n" "PO-Revision-Date: \n" "Last-Translator: Bruno Vecchi \n" "Language-Team: Bruno Vecchi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Padre/Plugin/SpellCheck.pm:31 lib/Padre/Plugin/SpellCheck.pm:56 msgid "Spell check" msgstr "Corrección ortográfica" #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Check spelling\tF7" msgstr "Comprobar ortografía\tF7" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Preferences" msgstr "Preferencias" #: lib/Padre/Plugin/SpellCheck.pm:80 msgid "No document opened." msgstr "Ningún documento abierto." #: lib/Padre/Plugin/SpellCheck.pm:97 lib/Padre/Plugin/SpellCheck/Dialog.pm:292 msgid "Spell check finished." msgstr "Comprobación ortográfica concluída." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:43 #, perl-format msgid "Spelling (%s)" msgstr "Ortografía (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:198 msgid "Add to dictionary" msgstr "Agregar al diccionario" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:199 msgid "Replace" msgstr "Reemplazar" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:200 msgid "Replace all" msgstr "Reemplazar todo" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:201 msgid "Ignore" msgstr "Ignorar" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:202 msgid "Ignore all" msgstr "Ignorar todo" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:203 msgid "Close" msgstr "Cerrar" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:233 msgid "Not in dictionary:" msgstr "No se encuentra en el diccionario:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:255 msgid "Suggestions" msgstr "Sugerencias" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:36 msgid "Spelling preferences" msgstr "Preferencias ortográficas" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:136 msgid "Dictionary:" msgstr "Diccionario:" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-ar.po0000644000175000000500000000370211614540674024675 0ustar kevinsrcmsgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-30 07:18+0200\n" "PO-Revision-Date: \n" "Last-Translator: Ahmad M. Zawawi \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Padre/Plugin/SpellCheck.pm:31 #: lib/Padre/Plugin/SpellCheck.pm:56 msgid "Spell check" msgstr "تمت التهجئه" #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Check spelling\tF7" msgstr "ÙØ­Øµ التهجئه\tF7" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Preferences" msgstr "الاعدادات" #: lib/Padre/Plugin/SpellCheck.pm:80 msgid "No document opened." msgstr "لا توجد أي وثيقة Ù…ÙØªÙˆØ­Ø©." #: lib/Padre/Plugin/SpellCheck.pm:97 #: lib/Padre/Plugin/SpellCheck/Dialog.pm:292 msgid "Spell check finished." msgstr "تمت التهجئه" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:43 #, perl-format msgid "Spelling (%s)" msgstr "التهجئه (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:198 msgid "Add to dictionary" msgstr "اضاÙÙ‡ الى المعجم" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:199 msgid "Replace" msgstr "تغيير" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:200 msgid "Replace all" msgstr "تغيير الكل" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:201 msgid "Ignore" msgstr "تجاهل" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:202 msgid "Ignore all" msgstr "تجاهل الكل" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:203 msgid "Close" msgstr "اغلاق" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:233 msgid "Not in dictionary:" msgstr "ليس بالمعجم:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:255 msgid "Suggestions" msgstr "اقتراحات" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:36 msgid "Spelling preferences" msgstr "اعدادات التهجئه" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:136 msgid "Dictionary:" msgstr "المعجم:" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-fr-fr.mo0000644000175000000500000000223611614541456025304 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì Q _w’™¨°ÁØ ó  ';ct ’Add to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-06-20 09:01+0200 PO-Revision-Date: Last-Translator: Jérôme Quelin Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: French X-Poedit-Country: FRANCE Ajouter au dictionnaireVérifier l'orthographe F7FermerDictionnaire :IgnorerToujours ignorerAucun document ouvert.Pas dans le dictionnaire :PréférencesRemplacerToujours remplacerVérification orthographiqueVérification orthographique terminée.Orthographe (%s)Préférences orthographiquesSuggestionsPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-de.mo0000644000175000000500000000225211614541456024656 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì f t « ¶ ÂÍÝö   #1#Fj žAdd to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2010-07-19 14:47+0200 PO-Revision-Date: 2010-07-19 14:47+0200 Last-Translator: Zeno Gantner Language-Team: German MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Zum Wörterbuch hinzufügenRechtschreibung prüfen F7SchließenWörterbuchIgnorierenAlle ignorierenKein Dokument geöffnet.Nicht im Wörterbuch:EinstellungenErsetzenAlle ersetzenRechtschreibprüfungRechtschreibprüfung abgeschlossen.Rechtschreibung (%s)Rechtschreibungs-EinstellungenVorschlägePadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-nl-nl.po0000644000175000000500000000377711614540674025327 0ustar kevinsrcmsgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-30 07:18+0200\n" "PO-Revision-Date: \n" "Last-Translator: ddn \n" "Language-Team: ddn \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Dutch\n" "X-Poedit-Country: Nederland - België\n" #: lib/Padre/Plugin/SpellCheck.pm:31 #: lib/Padre/Plugin/SpellCheck.pm:56 msgid "Spell check" msgstr "Spellingscontrole" #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Check spelling\tF7" msgstr "Controleer spelling\tF7" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Preferences" msgstr "Instellingen" #: lib/Padre/Plugin/SpellCheck.pm:80 msgid "No document opened." msgstr "Geen document geopend." #: lib/Padre/Plugin/SpellCheck.pm:97 #: lib/Padre/Plugin/SpellCheck/Dialog.pm:292 msgid "Spell check finished." msgstr "Spellingscontrole geëindigd" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:43 #, perl-format msgid "Spelling (%s)" msgstr "Spelling (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:198 msgid "Add to dictionary" msgstr "Toevoegen aan woordenboek" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:199 msgid "Replace" msgstr "Vervangen" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:200 msgid "Replace all" msgstr "Alles Vervangen" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:201 msgid "Ignore" msgstr "Negeren" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:202 msgid "Ignore all" msgstr "Alles negeren" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:203 msgid "Close" msgstr "Sluiten" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:233 msgid "Not in dictionary:" msgstr "Niet in woordenboek:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:255 msgid "Suggestions" msgstr "Suggesties" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:36 msgid "Spelling preferences" msgstr "Spelling instellingen" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:136 msgid "Dictionary:" msgstr "Woordenboek:" #~ msgid "Spelling" #~ msgstr "Orthographe" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-it-it.po0000644000175000000500000000426511614540674025326 0ustar kevinsrc# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-07-19 14:47+0200\n" "PO-Revision-Date: 2010-08-24 12:23+0100\n" "Last-Translator: Simone Blandino \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Italian\n" "X-Poedit-Country: ITALY\n" #: lib/Padre/Plugin/SpellCheck.pm:32 #: lib/Padre/Plugin/SpellCheck.pm:54 msgid "Spell check" msgstr "Correzione ortografica" #: lib/Padre/Plugin/SpellCheck.pm:55 msgid "Check spelling\tF7" msgstr "Controlla ortografia\tF7" #: lib/Padre/Plugin/SpellCheck.pm:56 msgid "Preferences" msgstr "Preferenze" #: lib/Padre/Plugin/SpellCheck.pm:78 msgid "No document opened." msgstr "Nessun documento aperto." #: lib/Padre/Plugin/SpellCheck.pm:95 #: lib/Padre/Plugin/SpellCheck/Dialog.pm:303 msgid "Spell check finished." msgstr "Correzione ortografica terminata." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:47 #, perl-format msgid "Spelling (%s)" msgstr "Ortografia (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:208 msgid "Add to dictionary" msgstr "Aggiungi al dizionario" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:209 msgid "Replace" msgstr "Sostituisci" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:210 msgid "Replace all" msgstr "Sostituisci tutto" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:211 msgid "Ignore" msgstr "Ignora" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:212 msgid "Ignore all" msgstr "Ignora tutto" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:213 msgid "Close" msgstr "Chiudi" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:243 msgid "Not in dictionary:" msgstr "Non nel dizionario:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:265 msgid "Suggestions" msgstr "Suggerimenti" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:39 msgid "Spelling preferences" msgstr "Preferenze ortografia" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:139 msgid "Dictionary:" msgstr "Dizionario:" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-pl.mo0000644000175000000500000000232411614541456024701 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì ´ ÂÕë óý1 BMUg {œµ ÈAdd to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-04-30 07:18+0200 PO-Revision-Date: 2009-05-10 20:42+0200 Last-Translator: Cezary Morga Language-Team: Polish <> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 0.3 Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); Dodaj do sÅ‚ownikaSprawdź pisowniÄ™ F7ZamknijSÅ‚ownik:IgnorujIgnoruj wszystkieBrak otwartego dokumentu.Nieznane sÅ‚owo:UstawieniaZastÄ…pZastÄ…p wszystkieSprawdzanie pisowniSprawdzanie pisowni zakoÅ„czone.Sprawdzanie pisowni (%s)Ustawienia pisowniPodpowiedziPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-fr.mo0000644000175000000500000000223611630355237024675 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì Q _w’™¨°ÁØ ó  ';ct ’Add to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-06-20 09:01+0200 PO-Revision-Date: Last-Translator: Jérôme Quelin Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: French X-Poedit-Country: FRANCE Ajouter au dictionnaireVérifier l'orthographe F7FermerDictionnaire :IgnorerToujours ignorerAucun document ouvert.Pas dans le dictionnaire :PréférencesRemplacerToujours remplacerVérification orthographiqueVérification orthographique terminée.Orthographe (%s)Préférences orthographiquesSuggestionsPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-tr.mo0000644000175000000500000000216411614541456024715 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì _ m}‘— §¶Ö æ òý!8M jAdd to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2010-07-19 14:47+0200 PO-Revision-Date: 2010-12-07 00:47+0100 Last-Translator: Burak Gürsoy Language-Team: German MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Sözlüğe ekleYazımı denetle F7KapatSözlükYoksayHepsini yoksayHerhangi bir belge açılmadı.Sözlükte yok:SeçeneklerDeÄŸiÅŸtirHepsini deÄŸiÅŸtirYazımı denetleYazım denetimi bitti.Yazım denetimi (%s)Yazım denetimi seçenekleriÖnerilerPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-tr.po0000644000175000000500000000421511614540674024720 0ustar kevinsrc# German translations for Padre-Plugin-SpellCheck package. # Copyright (C) 2010 THE Padre COPYRIGHT HOLDER # This file is distributed under the same license as Padre. # Zeno Gantner , 2010. # msgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-07-19 14:47+0200\n" "PO-Revision-Date: 2010-12-07 00:47+0100\n" "Last-Translator: Burak Gürsoy \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Padre/Plugin/SpellCheck.pm:32 #: lib/Padre/Plugin/SpellCheck.pm:54 msgid "Spell check" msgstr "Yazımı denetle" #: lib/Padre/Plugin/SpellCheck.pm:55 msgid "Check spelling\tF7" msgstr "Yazımı denetle\tF7" #: lib/Padre/Plugin/SpellCheck.pm:56 msgid "Preferences" msgstr "Seçenekler" #: lib/Padre/Plugin/SpellCheck.pm:78 msgid "No document opened." msgstr "Herhangi bir belge açılmadı." #: lib/Padre/Plugin/SpellCheck.pm:95 #: lib/Padre/Plugin/SpellCheck/Dialog.pm:303 msgid "Spell check finished." msgstr "Yazım denetimi bitti." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:47 #, perl-format msgid "Spelling (%s)" msgstr "Yazım denetimi (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:208 msgid "Add to dictionary" msgstr "Sözlüğe ekle" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:209 msgid "Replace" msgstr "DeÄŸiÅŸtir" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:210 msgid "Replace all" msgstr "Hepsini deÄŸiÅŸtir" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:211 msgid "Ignore" msgstr "Yoksay" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:212 msgid "Ignore all" msgstr "Hepsini yoksay" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:213 msgid "Close" msgstr "Kapat" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:243 msgid "Not in dictionary:" msgstr "Sözlükte yok:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:265 msgid "Suggestions" msgstr "Öneriler" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:39 msgid "Spelling preferences" msgstr "Yazım denetimi seçenekleri" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:139 msgid "Dictionary:" msgstr "Sözlük" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-zh-tw.mo0000644000175000000500000000210111614541456025330 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì l z‡—ž¦ ­ºÑâé ð ý  -:Add to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-04-30 07:18+0200 PO-Revision-Date: 2009-05-19 03:03+0800 Last-Translator: BlueT - Matthew Lien - 練喆明 Language-Team: Chinese (traditional) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit加入字典檢查拼字 F7關閉字典:忽略全部忽略沒有已開啟文件.ä¸åœ¨å­—典中:å好å–代全部å–代拼字檢查拼字檢查完æˆ.拼字中 (%s)拼字å好建議Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-pt-br.po0000644000175000000500000000371111614540674025317 0ustar kevinsrcmsgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-04-30 07:18+0200\n" "PO-Revision-Date: 2009-04-30 02:21-0300\n" "Last-Translator: Breno G. de Oliveira \n" "Language-Team: Brazilian Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/Padre/Plugin/SpellCheck.pm:31 #: lib/Padre/Plugin/SpellCheck.pm:56 msgid "Spell check" msgstr "Verificação ortográfica" #: lib/Padre/Plugin/SpellCheck.pm:57 msgid "Check spelling\tF7" msgstr "Verificar ortografia\tF7" #: lib/Padre/Plugin/SpellCheck.pm:58 msgid "Preferences" msgstr "Preferências" #: lib/Padre/Plugin/SpellCheck.pm:80 msgid "No document opened." msgstr "Nenhum documento aberto." #: lib/Padre/Plugin/SpellCheck.pm:97 #: lib/Padre/Plugin/SpellCheck/Dialog.pm:292 msgid "Spell check finished." msgstr "Verificação ortográfica conluída." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:43 #, perl-format msgid "Spelling (%s)" msgstr "Ortografia (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:198 msgid "Add to dictionary" msgstr "Adicionar ao dicionário" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:199 msgid "Replace" msgstr "Substituir" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:200 msgid "Replace all" msgstr "Substituir todas" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:201 msgid "Ignore" msgstr "Ignorar" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:202 msgid "Ignore all" msgstr "Ignorar todas" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:203 msgid "Close" msgstr "Fechar" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:233 msgid "Not in dictionary:" msgstr "Não existentes no dicionário:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:255 msgid "Suggestions" msgstr "Sugestões" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:36 msgid "Spelling preferences" msgstr "Preferências de ortografia" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:136 msgid "Dictionary:" msgstr "Dicionário:" Padre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-es-es.mo0000644000175000000500000000217611614541456025307 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì 9 G^w ~‹ “ "» Þ ëö&FW rAdd to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2009-05-25 02:34+0800 PO-Revision-Date: Last-Translator: Bruno Vecchi Language-Team: Bruno Vecchi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Agregar al diccionarioComprobar ortografía F7CerrarDiccionario:IgnorarIgnorar todoNingún documento abierto.No se encuentra en el diccionario:PreferenciasReemplazarReemplazar todoCorrección ortográficaComprobación ortográfica concluída.Ortografía (%s)Preferencias ortográficasSugerenciasPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-it-it.mo0000644000175000000500000000226011614541456025313 0ustar kevinsrc•Þ¤,-?Q Wc ju‰ œ¨ ° ¼È Þì Š ˜¯Ç ÎÚ áî  &2D![} £Add to dictionaryCheck spelling F7CloseDictionary:IgnoreIgnore allNo document opened.Not in dictionary:PreferencesReplaceReplace allSpell checkSpell check finished.Spelling (%s)Spelling preferencesSuggestionsProject-Id-Version: Padre-Plugin-SpellCheck Report-Msgid-Bugs-To: POT-Creation-Date: 2010-07-19 14:47+0200 PO-Revision-Date: 2010-08-24 12:23+0100 Last-Translator: Simone Blandino Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Italian X-Poedit-Country: ITALY Aggiungi al dizionarioControlla ortografia F7ChiudiDizionario:IgnoraIgnora tuttoNessun documento aperto.Non nel dizionario:PreferenzeSostituisciSostituisci tuttoCorrezione ortograficaCorrezione ortografica terminata.Ortografia (%s)Preferenze ortografiaSuggerimentiPadre-Plugin-SpellCheck-1.32/share/locale/Padre__Plugin__SpellCheck-de.po0000644000175000000500000000427411614540674024670 0ustar kevinsrc# German translations for Padre-Plugin-SpellCheck package. # Copyright (C) 2010 THE Padre COPYRIGHT HOLDER # This file is distributed under the same license as Padre. # Zeno Gantner , 2010. # msgid "" msgstr "" "Project-Id-Version: Padre-Plugin-SpellCheck\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-07-19 14:47+0200\n" "PO-Revision-Date: 2010-07-19 14:47+0200\n" "Last-Translator: Zeno Gantner \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/Padre/Plugin/SpellCheck.pm:32 lib/Padre/Plugin/SpellCheck.pm:54 msgid "Spell check" msgstr "Rechtschreibprüfung" #: lib/Padre/Plugin/SpellCheck.pm:55 msgid "Check spelling\tF7" msgstr "Rechtschreibung prüfen\tF7" #: lib/Padre/Plugin/SpellCheck.pm:56 msgid "Preferences" msgstr "Einstellungen" #: lib/Padre/Plugin/SpellCheck.pm:78 msgid "No document opened." msgstr "Kein Dokument geöffnet." #: lib/Padre/Plugin/SpellCheck.pm:95 lib/Padre/Plugin/SpellCheck/Dialog.pm:303 msgid "Spell check finished." msgstr "Rechtschreibprüfung abgeschlossen." #: lib/Padre/Plugin/SpellCheck/Dialog.pm:47 #, perl-format msgid "Spelling (%s)" msgstr "Rechtschreibung (%s)" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:208 msgid "Add to dictionary" msgstr "Zum Wörterbuch hinzufügen" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:209 msgid "Replace" msgstr "Ersetzen" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:210 msgid "Replace all" msgstr "Alle ersetzen" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:211 msgid "Ignore" msgstr "Ignorieren" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:212 msgid "Ignore all" msgstr "Alle ignorieren" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:213 msgid "Close" msgstr "Schließen" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:243 msgid "Not in dictionary:" msgstr "Nicht im Wörterbuch:" #: lib/Padre/Plugin/SpellCheck/Dialog.pm:265 msgid "Suggestions" msgstr "Vorschläge" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:39 msgid "Spelling preferences" msgstr "Rechtschreibungs-Einstellungen" #: lib/Padre/Plugin/SpellCheck/Preferences.pm:139 msgid "Dictionary:" msgstr "Wörterbuch" Padre-Plugin-SpellCheck-1.32/MANIFEST0000644000175000000500000000337012140566636015563 0ustar kevinsrcChanges inc/Module/Install.pm inc/Module/Install/Base.pm inc/Module/Install/Can.pm inc/Module/Install/DSL.pm inc/Module/Install/Fetch.pm inc/Module/Install/Makefile.pm inc/Module/Install/Metadata.pm inc/Module/Install/Share.pm inc/Module/Install/Win32.pm inc/Module/Install/With.pm inc/Module/Install/WriteAll.pm lib/Padre/Plugin/SpellCheck.pm lib/Padre/Plugin/SpellCheck/Checker.pm lib/Padre/Plugin/SpellCheck/Engine.pm lib/Padre/Plugin/SpellCheck/FBP/Checker.pm lib/Padre/Plugin/SpellCheck/FBP/Preferences.pm lib/Padre/Plugin/SpellCheck/Preferences.pm Makefile.PL MANIFEST This list of files META.yml MYMETA.json MYMETA.yml Padre-Plugin-SpellChecker.fbp README share/icons/16x16/spellcheck.png share/locale/Padre__Plugin__SpellCheck-ar.mo share/locale/Padre__Plugin__SpellCheck-ar.po share/locale/Padre__Plugin__SpellCheck-de.mo share/locale/Padre__Plugin__SpellCheck-de.po share/locale/Padre__Plugin__SpellCheck-es-es.mo share/locale/Padre__Plugin__SpellCheck-es-es.po share/locale/Padre__Plugin__SpellCheck-fr-fr.mo share/locale/Padre__Plugin__SpellCheck-fr.mo share/locale/Padre__Plugin__SpellCheck-fr.po share/locale/Padre__Plugin__SpellCheck-it-it.mo share/locale/Padre__Plugin__SpellCheck-it-it.po share/locale/Padre__Plugin__SpellCheck-nl-nl.mo share/locale/Padre__Plugin__SpellCheck-nl-nl.po share/locale/Padre__Plugin__SpellCheck-pl.mo share/locale/Padre__Plugin__SpellCheck-pl.po share/locale/Padre__Plugin__SpellCheck-pt-br.mo share/locale/Padre__Plugin__SpellCheck-pt-br.po share/locale/Padre__Plugin__SpellCheck-tr.mo share/locale/Padre__Plugin__SpellCheck-tr.po share/locale/Padre__Plugin__SpellCheck-zh-tw.mo share/locale/Padre__Plugin__SpellCheck-zh-tw.po t/00-load.t t/01-SpellCheck.t t/02-pod.t t/03-podcoverage.t t/04-Preferences.t t/05-Checker.t t/06-Engine.t Padre-Plugin-SpellCheck-1.32/Makefile.PL0000644000175000000500000000170212140456054016371 0ustar kevinsrcuse inc::Module::Install::DSL 1.06; all_from lib/Padre/Plugin/SpellCheck.pm requires_from lib/Padre/Plugin/SpellCheck.pm requires_from lib/Padre/Plugin/SpellCheck/Checker.pm requires_from lib/Padre/Plugin/SpellCheck/Engine.pm requires_from lib/Padre/Plugin/SpellCheck/Preferences.pm requires Class::Accessor 0.34 requires Encode 2.51 requires File::Which 1.09 requires Padre 0.98 requires Text::Aspell 0.09 if win32 requires Text::Hunspell 2.08 if !win32 requires Try::Tiny 0.12 requires constant 1.27 requires parent 0.225 test_requires Test::More 0.98 test_requires Test::Requires 0.06 recommends Test::Pod 1.46 recommends Test::Pod::Coverage 1.08 no_index directory qw{ inc share t xt } homepage http://padre.perlide.org/trac/wiki/PadrePluginSpellCheck bugtracker http://padre.perlide.org/trac repository http://svn.perlide.org/padre/trunk/Padre-Plugin-SpellCheck/ install_share Padre-Plugin-SpellCheck-1.32/lib/0002755000175000000500000000000012140566636015177 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/lib/Padre/0002755000175000000500000000000012140566636016232 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/0002755000175000000500000000000012140566636017470 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/0002755000175000000500000000000012140566636021505 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/FBP/0002755000175000000500000000000012140566636022114 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/FBP/Checker.pm0000644000175000000500000001255612137776415024031 0ustar kevinsrcpackage Padre::Plugin::SpellCheck::FBP::Checker; ## no critic # This module was generated by Padre::Plugin::FormBuilder::Perl. # To change this module edit the original .fbp file and regenerate. # DO NOT MODIFY THIS FILE BY HAND! use 5.008005; use utf8; use strict; use warnings; use Padre::Wx (); use Padre::Wx::Role::Main (); our $VERSION = '1.32'; our @ISA = qw{ Padre::Wx::Role::Main Wx::Dialog }; sub new { my $class = shift; my $parent = shift; my $self = $class->SUPER::new( $parent, -1, Wx::gettext("Padre-Plugin-SpellCheck"), Wx::DefaultPosition, Wx::DefaultSize, Wx::DEFAULT_DIALOG_STYLE, ); $self->{labeltext} = Wx::StaticText->new( $self, -1, Wx::gettext("Spell check finished:"), ); $self->{labeltext}->SetMinSize( [ 124, -1 ] ); $self->{label} = Wx::StaticText->new( $self, -1, Wx::gettext("Click Close"), ); $self->{label}->SetMinSize( [ 96, -1 ] ); $self->{list} = Wx::ListCtrl->new( $self, -1, Wx::DefaultPosition, Wx::DefaultSize, Wx::LC_LIST, ); Wx::Event::EVT_LIST_ITEM_ACTIVATED( $self, $self->{list}, sub { shift->_on_replace_clicked(@_); }, ); $self->{m_button1} = Wx::Button->new( $self, -1, Wx::gettext("&Add to dictionary"), Wx::DefaultPosition, Wx::DefaultSize, ); $self->{m_button1}->Disable; $self->{replace} = Wx::Button->new( $self, -1, Wx::gettext("&Replace"), Wx::DefaultPosition, Wx::DefaultSize, ); $self->{replace}->SetToolTip( Wx::gettext("Replace the highlighted word in Padre Editor.\nwith your selected word") ); Wx::Event::EVT_BUTTON( $self, $self->{replace}, sub { shift->_on_replace_clicked(@_); }, ); $self->{replace_all} = Wx::Button->new( $self, -1, Wx::gettext("R&eplace all"), Wx::DefaultPosition, Wx::DefaultSize, ); $self->{replace_all}->SetToolTip( Wx::gettext("Same as Replace\nbut also every future occurance\nin current Check") ); Wx::Event::EVT_BUTTON( $self, $self->{replace_all}, sub { shift->_on_replace_all_clicked(@_); }, ); $self->{ignore} = Wx::Button->new( $self, -1, Wx::gettext("&Ignore"), Wx::DefaultPosition, Wx::DefaultSize, ); $self->{ignore}->SetToolTip( Wx::gettext("Ignore the highlighted word in Padre Editor.") ); Wx::Event::EVT_BUTTON( $self, $self->{ignore}, sub { shift->_on_ignore_clicked(@_); }, ); $self->{ignore_all} = Wx::Button->new( $self, -1, Wx::gettext("I&gnore all"), Wx::DefaultPosition, Wx::DefaultSize, ); $self->{ignore_all}->SetToolTip( Wx::gettext("Same as Ignore\nbut also every future occurance\nin current Check") ); Wx::Event::EVT_BUTTON( $self, $self->{ignore_all}, sub { shift->_on_ignore_all_clicked(@_); }, ); $self->{m_button6} = Wx::Button->new( $self, Wx::ID_CANCEL, Wx::gettext("&Close"), Wx::DefaultPosition, Wx::DefaultSize, ); $self->{m_button6}->SetDefault; $self->{status_info} = Wx::StaticBoxSizer->new( Wx::StaticBox->new( $self, -1, Wx::gettext("Status Info."), ), Wx::HORIZONTAL, ); $self->{status_info}->Add( $self->{labeltext}, 0, Wx::ALL | Wx::EXPAND, 5 ); $self->{status_info}->Add( $self->{label}, 0, Wx::ALL | Wx::EXPAND, 5 ); my $bSizer21 = Wx::BoxSizer->new(Wx::VERTICAL); $bSizer21->Add( $self->{status_info}, 1, Wx::ALL | Wx::EXPAND, 5 ); my $sbSizer2 = Wx::StaticBoxSizer->new( Wx::StaticBox->new( $self, -1, Wx::gettext("Suggestions"), ), Wx::VERTICAL, ); $sbSizer2->Add( $self->{list}, 1, Wx::ALL | Wx::EXPAND, 5 ); my $bSizer22 = Wx::BoxSizer->new(Wx::VERTICAL); $bSizer22->Add( $sbSizer2, 1, Wx::ALL | Wx::EXPAND, 5 ); my $bSizer2 = Wx::BoxSizer->new(Wx::VERTICAL); $bSizer2->Add( $bSizer21, 0, Wx::ALL | Wx::EXPAND, 5 ); $bSizer2->Add( $bSizer22, 1, Wx::ALL | Wx::EXPAND, 5 ); my $bSizer3 = Wx::BoxSizer->new(Wx::VERTICAL); $bSizer3->Add( $self->{m_button1}, 0, Wx::ALL | Wx::EXPAND, 5 ); $bSizer3->Add( $self->{replace}, 0, Wx::ALL | Wx::EXPAND, 5 ); $bSizer3->Add( $self->{replace_all}, 0, Wx::ALL | Wx::EXPAND, 5 ); $bSizer3->Add( $self->{ignore}, 0, Wx::ALL | Wx::EXPAND, 5 ); $bSizer3->Add( $self->{ignore_all}, 0, Wx::ALL | Wx::EXPAND, 5 ); $bSizer3->Add( $self->{m_button6}, 0, Wx::ALL | Wx::EXPAND, 5 ); my $bSizer1 = Wx::BoxSizer->new(Wx::HORIZONTAL); $bSizer1->Add( $bSizer2, 1, Wx::ALL | Wx::EXPAND, 5 ); $bSizer1->Add( $bSizer3, 0, Wx::ALL | Wx::EXPAND, 5 ); $self->SetSizerAndFit($bSizer1); $self->Layout; return $self; } sub labeltext { $_[0]->{labeltext}; } sub label { $_[0]->{label}; } sub list { $_[0]->{list}; } sub replace { $_[0]->{replace}; } sub replace_all { $_[0]->{replace_all}; } sub ignore { $_[0]->{ignore}; } sub ignore_all { $_[0]->{ignore_all}; } sub _on_replace_clicked { $_[0]->main->error('Handler method _on_replace_clicked for event list.OnListItemActivated not implemented'); } sub _on_replace_all_clicked { $_[0]->main->error('Handler method _on_replace_all_clicked for event replace_all.OnButtonClick not implemented'); } sub _on_ignore_clicked { $_[0]->main->error('Handler method _on_ignore_clicked for event ignore.OnButtonClick not implemented'); } sub _on_ignore_all_clicked { $_[0]->main->error('Handler method _on_ignore_all_clicked for event ignore_all.OnButtonClick not implemented'); } 1; # Copyright 2008-2013 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/FBP/Preferences.pm0000644000175000000500000000560212137776415024720 0ustar kevinsrcpackage Padre::Plugin::SpellCheck::FBP::Preferences; ## no critic # This module was generated by Padre::Plugin::FormBuilder::Perl. # To change this module edit the original .fbp file and regenerate. # DO NOT MODIFY THIS FILE BY HAND! use 5.008005; use utf8; use strict; use warnings; use Padre::Wx (); use Padre::Wx::Role::Main (); our $VERSION = '1.32'; our @ISA = qw{ Padre::Wx::Role::Main Wx::Dialog }; sub new { my $class = shift; my $parent = shift; my $self = $class->SUPER::new( $parent, -1, Wx::gettext("Spelling preferences"), Wx::DefaultPosition, Wx::DefaultSize, Wx::DEFAULT_DIALOG_STYLE | Wx::RESIZE_BORDER, ); $self->{chosen_dictionary} = Wx::RadioBox->new( $self, -1, Wx::gettext("Dictionary"), Wx::DefaultPosition, Wx::DefaultSize, [ "Aspell", "Hunspell", ], 1, Wx::RA_SPECIFY_ROWS, ); $self->{chosen_dictionary}->SetSelection(0); Wx::Event::EVT_RADIOBOX( $self, $self->{chosen_dictionary}, sub { shift->on_dictionary_chosen(@_); }, ); $self->{language} = Wx::Choice->new( $self, -1, Wx::DefaultPosition, [ 220, -1 ], [], ); $self->{language}->SetSelection(0); $self->{m_sdbSizer1_save} = Wx::Button->new( $self, Wx::ID_SAVE, ); Wx::Event::EVT_BUTTON( $self, $self->{m_sdbSizer1_save}, sub { shift->_on_button_save_clicked(@_); }, ); $self->{m_sdbSizer1_cancel} = Wx::Button->new( $self, Wx::ID_CANCEL, ); $self->{sbSizer4} = Wx::StaticBoxSizer->new( Wx::StaticBox->new( $self, -1, Wx::gettext("Select Dictionary and Language"), ), Wx::VERTICAL, ); $self->{sbSizer4}->Add( $self->{chosen_dictionary}, 0, Wx::ALL | Wx::EXPAND, 5 ); $self->{sbSizer4}->Add( $self->{language}, 0, Wx::ALL, 5 ); $self->{m_sdbSizer1} = Wx::StdDialogButtonSizer->new; $self->{m_sdbSizer1}->AddButton( $self->{m_sdbSizer1_save} ); $self->{m_sdbSizer1}->AddButton( $self->{m_sdbSizer1_cancel} ); $self->{m_sdbSizer1}->Realize; my $bSizer1 = Wx::BoxSizer->new(Wx::VERTICAL); $bSizer1->Add( $self->{sbSizer4}, 1, Wx::ALL | Wx::EXPAND, 5 ); $bSizer1->Add( $self->{m_sdbSizer1}, 0, Wx::ALL | Wx::EXPAND, 5 ); $self->SetSizerAndFit($bSizer1); $self->Layout; return $self; } sub chosen_dictionary { $_[0]->{chosen_dictionary}; } sub language { $_[0]->{language}; } sub on_dictionary_chosen { $_[0]->main->error('Handler method on_dictionary_chosen for event chosen_dictionary.OnRadioBox not implemented'); } sub _on_button_ok_clicked { $_[0]->main->error('Handler method _on_button_ok_clicked for event m_sdbSizer1.OnOKButtonClick not implemented'); } sub _on_button_save_clicked { $_[0]->main->error('Handler method _on_button_save_clicked for event m_sdbSizer1.OnSaveButtonClick not implemented'); } 1; # Copyright 2008-2013 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/Checker.pm0000644000175000000500000002225612140563550023404 0ustar kevinsrcpackage Padre::Plugin::SpellCheck::Checker; use v5.10; use warnings; use strict; use Encode; use Padre::Logger; use Padre::Locale (); use Padre::Unload (); use Padre::Plugin::SpellCheck::FBP::Checker (); our $VERSION = '1.32'; use parent qw( Padre::Plugin::SpellCheck::FBP::Checker Padre::Plugin ); use Class::Accessor 'antlers'; has _autoreplace => ( is => 'rw' ); # list of automatic replaces has _engine => ( is => 'rw' ); # pps:engine object has _label => ( is => 'rw' ); # label hosting the misspelled word has _list => ( is => 'rw' ); # listbox listing the suggestions has _offset => ( is => 'rw' ); # offset of _text within the editor has _sizer => ( is => 'rw' ); # window sizer has _text => ( is => 'rw' ); # text being spellchecked ####### # Method new ####### sub new { my $class = shift; my $main = shift; # Create the dialog my $self = $class->SUPER::new($main); # define where to display main dialog $self->CenterOnParent; $self->SetTitle( sprintf( Wx::gettext('Spell-Checker v%s'), $VERSION ) ); $self->_set_up; return $self; } ####### # Method _set_up ####### sub _set_up { my $self = shift; my $main = $self->main; my $current = $main->current; my $text_spell = $self->config_read->{Engine}; my $iso_name = $self->config_read->{$text_spell}; #Thanks alias my $status_info = "$text_spell => " . $self->padre_locale_label($iso_name); $self->{status_info}->GetStaticBox->SetLabel($status_info); # TODO: maybe grey out the menu option if # no file is opened? unless ( $current->document ) { $main->message( Wx::gettext('No document opened.'), 'Padre' ); return; } my $mime_type = $current->document->mimetype; require Padre::Plugin::SpellCheck::Engine; my $engine = Padre::Plugin::SpellCheck::Engine->new( $mime_type, $iso_name, $text_spell ); $self->_engine($engine); # fetch text to check my $selection = $current->text; my $wholetext = $current->document->text_get; my $text = $selection || $wholetext; $self->_text($text); my $offset = $selection ? $current->editor->GetSelectionStart : 0; $self->_offset($offset); # try to find a mistake my @error = $engine->check($text); my ( $word, $pos ) = @error; $self->{error} = \@error; # no mistake means bbb we're done if ( not defined $word ) { return; } $self->_autoreplace( {} ); $self->_update; return; } ####### # Method _update; # update the dialog box with current error. aa ####### sub _update { my $self = shift; my $main = $self->main; my $current = $main->current; my $editor = $current->editor; my $error = $self->{error}; my ( $word, $pos ) = @{$error}; # update selection in parent window my $offset = $self->_offset; my $from = $offset + $pos + $self->_engine->_utf_chars; my $to = $from + length Encode::encode_utf8($word); $editor->goto_pos_centerize($from); $editor->SetSelection( $from, $to ); # update label $self->labeltext->SetLabel('Not in dictionary:'); $self->label->SetLabel($word); # update list my @suggestions = $self->_engine->get_suggestions($word); $self->list->DeleteAllItems; my $i = 0; foreach my $w ( reverse @suggestions ) { next unless defined $w; my $item = Wx::ListItem->new; $item->SetText($w); my $idx = $self->list->InsertItem($item); last if ++$i == 32; #TODO Fixme: should be a preference, why } # select first item my $item = $self->list->GetItem(0); $item->SetState(Wx::wxLIST_STATE_SELECTED); $self->list->SetItem($item); return; } ####### # dialog->_next; # # try to find next mistake, and update dialog to show this new error. if # no error, display a message and exit. # # no params. no return value. ####### sub _next { my ($self) = @_; my $autoreplace = $self->_autoreplace; # try to find next mistake my @error = $self->_engine->check( $self->_text ); my ( $word, $pos ) = @error; $self->{error} = \@error; # no mistake means we're done if ( not defined $word ) { $self->list->DeleteAllItems; $self->label->SetLabel('Click Close'); $self->labeltext->SetLabel('Spell check finished:...'); $self->{replace}->Disable; $self->{replace_all}->Disable; $self->{ignore}->Disable; $self->{ignore_all}->Disable; return; } # check if we have hit a replace all word if ( exists $autoreplace->{$word} ) { $self->_replace( $autoreplace->{$word} ); redo; # move on to next error } # update gui with new error $self->_update; return; } ####### # Method _replace( $word ); # # fix current error by replacing faulty word with $word. # # no param. no return value. ####### sub _replace { my ( $self, $new ) = @_; my $main = $self->main; my $editor = $main->current->editor; # replace word in editor my $error = $self->{error}; my ( $word, $pos ) = @{$error}; my $offset = $self->_offset; my $from = $offset + $pos + $self->_engine->_utf_chars; # say 'length '.length Encode::encode_utf8($word); my $to = $from + length Encode::encode_utf8($word); $editor->SetSelection( $from, $to ); $editor->ReplaceSelection($new); # FIXME: as soon as STC issue is resolved: # Include UTF8 characters from newly added word # to overall count of UTF8 characters # so we can set proper selections $self->_engine->_count_utf_chars($new); # remove the beginning of the text, up to after replaced word my $posold = $pos + length $word; my $posnew = $pos + length $new; my $text = substr $self->_text, $posold; $self->_text($text); $offset += $posnew; $self->_offset($offset); return; } ######## # Event Handlers ######## ####### # Event Handler _on_ignore_all_clicked; ####### sub _on_ignore_all_clicked { my $self = shift; my $error = $self->{error}; my ( $word, $pos ) = @{$error}; $self->_engine->set_ignore_word($word); $self->_on_ignore_clicked; return; } ####### # Event Handler$self->_on_ignore_clicked; ####### sub _on_ignore_clicked { my $self = shift; # remove the beginning of the text, up to after current error my $error = $self->{error}; my ( $word, $pos ) = @{$error}; $pos += length $word; my $text = substr $self->_text, $pos; $self->_text($text); my $offset = $self->_offset + $pos; $self->_offset($offset); # FIXME: as soon as STC issue is resolved: # Include UTF8 characters from ignored word # to overall count of UTF8 characters # so we can set proper selections $self->_engine->_count_utf_chars($word); # try to find next error $self->_next; return; } ####### # Event Handler _on_replace_all_clicked; ####### sub _on_replace_all_clicked { my $self = shift; my $error = $self->{error}; my ( $word, $pos ) = @{$error}; # get replacing word my $index = $self->list->GetNextItem( -1, Wx::wxLIST_NEXT_ALL, Wx::wxLIST_STATE_SELECTED ); return if $index == -1; my $selected_word = $self->list->GetItem($index)->GetText; # store automatic replacement $self->_autoreplace->{$word} = $selected_word; # do the replacement $self->_on_replace_clicked; return; } ####### # Event Handler _on_replace_clicked; ####### sub _on_replace_clicked { my $self = shift; my $event = shift; # get replacing word my $index = $self->list->GetNextItem( -1, Wx::wxLIST_NEXT_ALL, Wx::wxLIST_STATE_SELECTED ); return if $index == -1; my $selected_word = $self->list->GetItem($index)->GetText; # actually replace word in editor $self->_replace($selected_word); # try to find next error $self->_next; return; } ####### # Composed Method padre_local_label # aspell to padre local label ####### sub padre_locale_label { my $self = shift; my $local_dictionary = shift; my $lc_local_dictionary = lc( $local_dictionary ? $local_dictionary : 'en_GB' ); $lc_local_dictionary =~ s/_/-/; require Padre::Locale; my $label = Padre::Locale::label($lc_local_dictionary); return $label; } 1; __END__ =pod =head1 NAME Padre::Plugin::SpellCheck::Checker - Check spelling in Padre, The Perl IDE. =head1 VERSION version: 1.32 =head1 DESCRIPTION This module implements the Checker dialogue window that will be used to interact with the user when spelling mistakes have been spotted. =head1 METHODS =over 2 =item * new $self->{dialog} = Padre::Plugin::SpellCheck::Checker->new( $self ); Create and return a new dialogue window. =item * padre_locale_label uses Padre::Local to convert language iso693_iso3166 to utf8text strings =back =head1 BUGS AND LIMITATIONS Text::Hunspell hard coded for /usr/share/hunspell/ =head1 DEPENDENCIES Padre, Padre::Locale, Class::XSAccessor, Padre::Plugin::SpellCheck::FBP::Checker, and either or ( Text::Hunspell or Text::Aspell ) =head1 SEE ALSO For all related information (bug reporting, source code repository, etc.), refer to L. =head1 AUTHORS Kevin Dawson Ebowtie@cpan.orgE Ahmad M. Zawawi Eahmad.zawawi@gmail.comE Fayland Lam Efayland@gmail.comE Jerome Quelin Ejquelin@gmail.comE =head1 COPYRIGHT AND LICENSE Copyright E 2012-2013 AUTHORS and "CONTRIBUTORS" as listed above. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut # Copyright 2008-2013 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/Engine.pm0000644000175000000500000001222712140563574023250 0ustar kevinsrcpackage Padre::Plugin::SpellCheck::Engine; use v5.10; use warnings; use strict; our $VERSION = '1.32'; use Padre::Logger; use Padre::Unload (); use Class::Accessor 'antlers'; has _ignore => ( is => 'rw', isa => 'Str' ); # list of words to ignore has _speller => ( is => 'rw', isa => 'Str' ); # real text::Aspell object # FIXME: as soon as wxWidgets/wxPerl supports # newer version 1.31_03 # number of UTF8 characters # used in calculating current possition has _utf_chars => ( is => 'rw', isa => 'Str' ); my %MIMETYPE_MODE = ( 'application/x-latex' => 'tex', 'text/html' => 'html', 'text/xml' => 'sgml', ); ####### # new ####### sub new { my $class = shift; # What class are we constructing? my $self = {}; # Allocate new memory bless $self, $class; # Mark it of the right type $self->_init(@_); # Call _init with remaining args return $self; } ####### # Method _init ####### sub _init { my ( $self, $mimetype, $iso, $engine ) = @_; $self->_ignore( {} ); $self->_utf_chars(0); # create speller object my $speller; if ( $engine eq 'Aspell' ) { require Text::Aspell; $speller = Text::Aspell->new; $speller->set_option( 'sug-mode', 'normal' ); $speller->set_option( 'lang', $iso ); if ( exists $MIMETYPE_MODE{$mimetype} ) { if ( not defined $speller->set_option( 'mode', $MIMETYPE_MODE{$mimetype} ) ) { my $err = $speller->errstr; warn "Could not set Aspell mode '$MIMETYPE_MODE{$mimetype}': $err\n"; } } } else { require Text::Hunspell; #TODO add some checking # You can use relative or absolute paths. $speller = Text::Hunspell->new( "/usr/share/hunspell/$iso.aff", # Hunspell affix file "/usr/share/hunspell/$iso.dic" # Hunspell dictionary file ); } TRACE( $speller->print_config ) if DEBUG; $self->_speller($speller); return; } ####### # Method check ####### sub check { my ( $self, $text ) = @_; my $ignore = $self->_ignore; # iterate over word boundaries while ( $text =~ /(.+?)(\b|\z)/g ) { my $word = $1; # skip... next unless defined $word; # empty strings next unless $word =~ /^\p{Letter}+$/i; # non-spellable words # FIXME: when STC issues will be resolved: # count number of UTF8 characters in ignored/correct words # it's going to be used to calculate relative position # of next problematic word if ( exists $ignore->{$word} ) { $self->_count_utf_chars($word); next; } if ( $self->_speller->check($word) ) { $self->_count_utf_chars($word); next; } # oops! spell mistake! my $pos = ( pos $text ) - ( length $word ); return $word, $pos; } # $text does not contain any error return; } ####### # Method set_ignore_word ####### sub set_ignore_word { my ( $self, $word ) = @_; $self->_ignore->{$word} = 1; return; } ####### # Method get_suggestions ####### sub get_suggestions { my ( $self, $word ) = @_; return $self->_speller->suggest($word); } ####### #TODO FIXME: as soon as STC issues is resolved # sub _count_utf_chars { my ( $self, $word ) = @_; foreach ( split //, $word ) { $self->{_utf_chars}++ if ord($_) >= 128; } return; } 1; __END__ =pod =head1 NAME Padre::Plugin::SpellCheck::Engine - Check spelling in Padre, The Perl IDE. =head1 VERSION version: 1.32 =head1 PUBLIC METHODS =head2 Constructor =over 4 =item my $engine = PPS::Engine->new; Create a new engine to be used later on. =back =head2 Instance methods =over 4 =item * my ($word, $pos) = $engine->check( $text ); Spell check C<$text> (according to current speller), and return the first error encountered (undef if no spelling mistake). An error is reported as the faulty C<$word>, as well as the C<$pos> of the word in the text (position of the start of the faulty word). =item * $engine->set_ignore_word( $word ); Tell engine to ignore C<$word> for rest of the spell check. =item * my @dictionaries = $engine->dictionaries; Return a (reduced) list of dictionaries installed with Aspell. The names returned are the dictionary locale names (e.g. C). Note that only plain locales are reported, the variations coming with Aspell are stripped. =item * my @suggestions = $engine->get_suggestions( $word ); Return suggestions for C<$word>. =back =head1 BUGS AND LIMITATIONS Text::Hunspell hard coded for /usr/share/hunspell/ =head1 DEPENDENCIES Padre, Class::XSAccessor and either or ( Text::Hunspell or Text::Aspell ) =head1 SEE ALSO For all related information (bug reporting, source code repository, etc.), refer to L. =head1 AUTHORS Kevin Dawson Ebowtie@cpan.orgE Ahmad M. Zawawi Eahmad.zawawi@gmail.comE Fayland Lam Efayland@gmail.comE Jerome Quelin Ejquelin@gmail.comE =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2010 by Fayland Lam, Jerome Quelin. Also Copyright E 2012-2013 AUTHORS and "CONTRIBUTORS" as listed above. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut # Copyright 2008-2012 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck/Preferences.pm0000644000175000000500000002015612140563501024272 0ustar kevinsrcpackage Padre::Plugin::SpellCheck::Preferences; use v5.10; use warnings; use strict; use Try::Tiny; use Padre::Logger; use Padre::Util (); use Padre::Locale (); use Padre::Unload (); use Padre::Plugin::SpellCheck::FBP::Preferences (); our $VERSION = '1.32'; use parent qw( Padre::Plugin::SpellCheck::FBP::Preferences Padre::Plugin ); ####### # Method new ####### sub new { my $class = shift; my $main = shift; # Create the dialogue my $self = $class->SUPER::new($main); # define where to display main dialogue $self->CenterOnParent; $self->SetTitle( sprintf Wx::gettext('Spell-Checker-Preferences v%s'), $VERSION ); $self->_set_up; return $self; } ####### # Method _set_up ####### sub _set_up { my $self = shift; # set preferred dictionary from config try { $self->{dictionary} = $self->config_read->{Engine}; } catch { $self->{dictionary} = 'Aspell'; }; if ( $self->{dictionary} eq 'Aspell' ) { # use Aspell as default, as the aspell engine works $self->chosen_dictionary->SetSelection(0); $self->_local_aspell_dictionaries; } else { $self->chosen_dictionary->SetSelection(1); $self->_local_hunspell_dictionaries; } # update dialogue with locally install dictionaries; $self->_display_dictionaries; return; } ####### # Method _local_aspell_dictionaries ####### sub _local_aspell_dictionaries { my $self = shift; my @local_dictionaries_names = (); try { require Text::Aspell; my $speller = Text::Aspell->new; my @local_dictionaries = grep { $_ =~ /^\w+$/ } map { $_->{name} } $speller->dictionary_info; $self->{local_dictionaries} = \@local_dictionaries; TRACE("Aspell locally installed dictionaries found = @local_dictionaries") if DEBUG; TRACE("Aspell iso to dictionary names = $self->{dictionary_names}") if DEBUG; for (@local_dictionaries) { push @local_dictionaries_names, $self->padre_locale_label($_); $self->{dictionary_names}{$_} = $self->padre_locale_label($_); } @local_dictionaries_names = sort @local_dictionaries_names; $self->{local_dictionaries_names} = \@local_dictionaries_names; TRACE("Aspell local dictionaries names = $self->{local_dictionaries_names}") if DEBUG; } catch { $self->{local_dictionaries_names} = \@local_dictionaries_names; $self->main->info( Wx::gettext('Text::Aspell is not installed') ); }; return; } ####### # Method _local_aspell_dictionaries ####### sub _local_hunspell_dictionaries { my $self = shift; my @local_dictionaries_names; my @local_dictionaries; # if ( require Text::Hunspell ) { try { require Text::Hunspell; require Padre::Util; my $speller = Padre::Util::run_in_directory_two( cmd => 'hunspell -D '0' ); TRACE("hunspell speller = $speller") if DEBUG; #TODO this is yuck must do better my @speller_raw = grep { $_ =~ /\w{2}_\w{2}$/m } split /\n/, $speller->{error}; my %temp_speller; foreach (@speller_raw) { if ( $_ !~ m/hyph/ ) { m/(\w{2}_\w{2})$/; my $tmp = $1; $temp_speller{$tmp}++; } } while ( my ( $key, $value ) = each %temp_speller ) { push @local_dictionaries, $key; } $self->{local_dictionaries} = \@local_dictionaries; TRACE("Hunspell locally installed dictionaries found = $self->{local_dictionaries}") if DEBUG; TRACE("Hunspell iso to dictionary names = $self->{dictionary_names}") if DEBUG; for (@local_dictionaries) { push( @local_dictionaries_names, $self->padre_locale_label($_) ); $self->{dictionary_names}{$_} = $self->padre_locale_label($_); } @local_dictionaries_names = sort @local_dictionaries_names; $self->{local_dictionaries_names} = \@local_dictionaries_names; TRACE("Hunspell local dictionaries names = $self->{local_dictionaries_names}") if DEBUG; return; } catch { $self->{local_dictionaries_names} = \@local_dictionaries_names; $self->main->info( Wx::gettext('Text::Hunspell is not installed') ); return; }; return; } ####### # Method _display_dictionaries ####### sub _display_dictionaries { my $self = shift; # my $main = $self->main; my $prefered_dictionary; try { $prefered_dictionary = $self->config_read->{ $self->{dictionary} }; } catch { $prefered_dictionary = 'Aspell'; }; TRACE("iso prefered_dictionary = $prefered_dictionary ") if DEBUG; # set local_dictionaries_index to zero in case prefered_dictionary not found my $local_dictionaries_index = 0; require Padre::Locale; for ( 0 .. $#{ $self->{local_dictionaries_names} } ) { if ( $self->{local_dictionaries_names}->[$_] eq $self->padre_locale_label($prefered_dictionary) ) { $local_dictionaries_index = $_; } } TRACE("local_dictionaries_index = $local_dictionaries_index ") if DEBUG; $self->language->Clear; # load local_dictionaries_names $self->language->Append( $self->{local_dictionaries_names} ); # highlight prefered_dictionary $self->language->SetSelection($local_dictionaries_index); return; } ####### # event handler _on_button_ok_clicked ####### sub _on_button_save_clicked { my $self = shift; my $select_dictionary_name = $self->{local_dictionaries_names}->[ $self->language->GetSelection() ]; TRACE("selected dictionary name = $select_dictionary_name ") if DEBUG; my $select_dictionary_iso = 0; # require Padre::Locale; for my $iso ( keys %{ $self->{dictionary_names} } ) { if ( $self->padre_locale_label($iso) eq $select_dictionary_name ) { $select_dictionary_iso = $iso; } } TRACE("selected dictionary iso = $select_dictionary_iso ") if DEBUG; # save config info my $config = $self->config_read; $config->{ $self->{dictionary} } = $select_dictionary_iso; $config->{Engine} = $self->{dictionary}; $self->config_write($config); $self->Hide; return; } ####### # event handler on_dictionary_chosen ####### sub on_dictionary_chosen { my $self = shift; if ( $self->chosen_dictionary->GetSelection() == 0 ) { $self->{dictionary} = 'Aspell'; TRACE("Aspell chosen") if DEBUG; $self->_local_aspell_dictionaries; } else { $self->{dictionary} = 'Hunspell'; TRACE("Hunspell chosen") if DEBUG; $self->_local_hunspell_dictionaries; } $self->_display_dictionaries; return; } ####### # Composed Method padre_local_label # aspell to padre local label ####### sub padre_locale_label { my $self = shift; my $local_dictionary = shift; my $lc_local_dictionary = lc( $local_dictionary ? $local_dictionary : 'en_GB' ); $lc_local_dictionary =~ s/_/-/; require Padre::Locale; my $label = Padre::Locale::label($lc_local_dictionary); return $label; } 1; __END__ =pod =head1 NAME Padre::Plugin::SpellCheck::Preferences - Check spelling in Padre, The Perl IDE. =head1 VERSION version: 1.32 =head1 DESCRIPTION This module handles the Preferences dialogue window that is used to set your chosen dictionary and preferred language. =head1 METHODS =over 2 =item * new $self->{dialog} = Padre::Plugin::SpellCheck::Preferences->new( $self ); Create and return a new dialogue window. =item * on_dictionary_chosen event handler =item * padre_locale_label uses Padre::Local to convert language iso693_iso3166 to utf8text strings =back =head1 BUGS AND LIMITATIONS Throws an info on the status bar if you try to select a language if dictionary not installed =head1 DEPENDENCIES Padre, Padre::Plugin::SpellCheck::FBP::Preferences, and either or ( Text::Hunspell or Text::Aspell ) =head1 SEE ALSO For all related information (bug reporting, source code repository, etc.), refer to L. =head1 AUTHORS Kevin Dawson Ebowtie@cpan.orgE Ahmad M. Zawawi Eahmad.zawawi@gmail.comE Fayland Lam Efayland@gmail.comE Jerome Quelin Ejquelin@gmail.comE =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2010 by Fayland Lam, Jerome Quelin. Also Copyright E 2012-2013 AUTHORS and "CONTRIBUTORS" as listed above. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut # Copyright 2008-2013 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/lib/Padre/Plugin/SpellCheck.pm0000644000175000000500000002305012140563625022034 0ustar kevinsrcpackage Padre::Plugin::SpellCheck; use 5.010001; use strict; use warnings; use Padre::Plugin (); use Padre::Unload (); use File::Which (); use Try::Tiny; our $VERSION = '1.32'; use parent qw( Padre::Plugin ); # Child modules we need to unload when disabled use constant CHILDREN => qw{ Padre::Plugin::SpellCheck Padre::Plugin::SpellCheck::Checker Padre::Plugin::SpellCheck::FBP::Checker Padre::Plugin::SpellCheck::Engine Padre::Plugin::SpellCheck::Preferences Padre::Plugin::SpellCheck::FBP::Preferences Text::Aspell Text::Hunspell }; ####### # Define Plugin Name Spell Checker ####### sub plugin_name { return Wx::gettext('Spell Checker'); } ####### # Define Padre Interfaces required ####### sub padre_interfaces { return ( 'Padre::Plugin' => '0.96', 'Padre::Unload' => '0.96', # used by my sub packages 'Padre::Locale' => '0.96', 'Padre::Logger' => '0.96', 'Padre::Wx' => '0.96', 'Padre::Wx::Role::Main' => '0.96', 'Padre::Util' => '0.97', ); } ####### # plugin menu ####### sub menu_plugins { my $self = shift; my $main = $self->main; # Create a manual menu item my $menu_item = Wx::MenuItem->new( undef, -1, $self->plugin_name . "...\tF7", ); Wx::Event::EVT_MENU( $main, $menu_item, sub { $self->spell_check; }, ); return $menu_item; } ######### # We need plugin_enable # as we have an external dependency ######### sub plugin_enable { my $self = shift; my $local_dictionary_bin_exists = 0; # Tests for externals used by Preference's try { if ( require Text::Aspell ) { $local_dictionary_bin_exists = 1; } }; try { if ( File::Which::which('hunspell') ) { $local_dictionary_bin_exists = 1; } }; #Set/ReSet Config data if ($local_dictionary_bin_exists) { $self->_config; } return $local_dictionary_bin_exists; } ####### # Composed Method _config # called on enable in plugin manager, bit like run/setup for a Plugin ####### sub _config { my $self = shift; my $config = $self->config_read; ### # Info P-P-SpellCheck < 1.21 # $config->{dictionary} = iso # # Info P-P-SpellCheck = 1.22 # - $config->{dictionary} = iso # + $config->{Aspell} = en_GB # + $config->{Hunspell} = en_AU # + $config->{Version} = $VERSION # # Info P-P-SpellCheck >= 1.23 # + $config->{Engine} = 'Aspell' ### try { if ( $config->{Version} >= 1.23 ) { return; } }; try { if ( $config->{Version} < 1.23 ) { $config->{Version} = $VERSION; $config->{Engine} = 'Aspell'; $self->config_write($config); return; } }; try { if ( $config->{dictionary} ) { my $tmp_iso = $config->{dictionary}; $self->config_write( {} ); $config = $self->config_read; $config->{Aspell} = $tmp_iso; $config->{Hunspell} = $tmp_iso; $config->{Version} = $VERSION; $config->{Engine} = 'Aspell'; $self->config_write($config); return; } } catch { $self->config_write( {} ); $config->{Aspell} = 'en_GB'; $config->{Hunspell} = 'en_GB'; $config->{Version} = $VERSION; $config->{Engine} = 'Aspell'; $self->config_write($config); return; }; return; } ######## # plugin_disable ######## sub plugin_disable { my $self = shift; # Close the dialog if it is hanging around $self->clean_dialog; # Unload all our child classes for my $package (CHILDREN) { require Padre::Unload; Padre::Unload->unload($package); } $self->SUPER::plugin_disable(@_); return 1; } ######## # Composed Method clean_dialog ######## sub clean_dialog { my $self = shift; # Close the main dialog if it is hanging around if ( $self->{dialog} ) { $self->{dialog}->Hide; $self->{dialog}->Destroy; delete $self->{dialog}; } return 1; } ####### # plugin_preferences ####### sub plugin_preferences { my $self = shift; my $main = $self->main; # Clean up any previous existing dialog $self->clean_dialog; try { require Padre::Plugin::SpellCheck::Preferences; $self->{dialog} = Padre::Plugin::SpellCheck::Preferences->new($main); $self->{dialog}->ShowModal; } catch { $self->main->error( sprintf Wx::gettext('Error: %s'), $_ ); }; return; } ####### # spell_check ####### sub spell_check { my $self = shift; my $main = $self->main; # Clean up any previous existing dialog $self->clean_dialog; try { require Padre::Plugin::SpellCheck::Checker; $self->{dialog} = Padre::Plugin::SpellCheck::Checker->new($main); $self->{dialog}->Show; } catch { $self->main->error( sprintf Wx::gettext('Error: %s'), $_ ); }; return; } ####### # Add icon to Plugin ####### sub plugin_icon { my $class = shift; my $share = $class->plugin_directory_share or return; my $file = File::Spec->catfile( $share, 'icons', '16x16', 'spellcheck.png' ); return unless -f $file; return unless -r $file; return Wx::Bitmap->new( $file, Wx::wxBITMAP_TYPE_PNG ); } ####### # Add SpellCheck Preferences to Context Menu ####### sub event_on_context_menu { my ( $self, $document, $editor, $menu, $event ) = @_; #Test for valid file type return if not $document->filename; $menu->AppendSeparator; my $item = $menu->Append( -1, Wx::gettext('SpellCheck Preferences...') ); Wx::Event::EVT_MENU( $self->main, $item, sub { $self->plugin_preferences }, ); return; } 1; __END__ # DO NOT REMOVE sub menu_plugins_simple { my $self = shift; return Wx::gettext('Spell Check') => [ Wx::gettext("Check spelling...\tF7") => sub { $self->spell_check }, Wx::gettext('Preferences') => sub { $self->plugin_preferences }, ]; } =pod =encoding utf8 =head1 NAME Padre::Plugin::SpellCheck - Check spelling in Padre, The Perl IDE. =head1 VERSION version: 1.32 =head1 DESCRIPTION For Padre 0.98 This plug-in allows one to check there spelling within Padre using C (standard spelling short-cut across text processors). One can change the dictionary language used (based upon install languages) in the preferences window via Plug-in Manager. Note that preferences can B be setup while the plugin is B. Preferences are persistent. You need to Save your preferred language. This plug-in is using C default (legacy). You can also use C, so check these module's pod for more information and install the one for you. Of course, you need to have the relevant Dictionary binary, dev and dictionary installed. =head1 SYNOPSIS Check your file or selected text for spelling errors in your preferred language. F7 =head1 PUBLIC METHODS =head2 Standard Padre::Plugin API C defines a plug-in which follows C API. Refer to this module's documentation for more information. The following methods are implemented: =over 7 =item clean_dialog() =item menu_plugins() =item padre_interfaces() =item plugin_disable() =item plugin_enable() Return the plug-in's configuration, or a suitable default one if none exist previously. =item plugin_name() =item plugin_preferences() Spelling preferences window normally access via Plug-in Manager =item plugin_icon() Used by Plug-in Manager =item event_on_context_menu Add access to spelling preferences window. =back =head2 Spell checking methods =over 1 =item * spell_check() Spell checks the current selection (or the whole document). =back =head1 BUGS and LIMITATIONS If you upgrade your OS, and run Perl from a local/lib, you may find Hunspell stops showing local dictionary in preferences, you will need to un-install Text::Hunspell and re-install in CPAN. Spell-checking non-ascii files has bugs: the selection does not match the word boundaries, and as the spell checks moves further in the document, offsets are totally irrelevant. This is a bug in C that has some Unicode problems... So unfortunately, there's nothing that I can do in this plug-in to tackle this bug. Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SEE ALSO Plug-in icon courtesy of Mark James, at L. =over 2 =item * Padre-Plugin-SpellCheck web page L =item * Our svn repository L, and can be browsed at L. =back You can also look for information on this module at: =over 4 =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Open bugs L =back Everything Aspell related: L. Everything Hunspell related: L. =head1 AUTHORS Kevin Dawson Ebowtie@cpan.orgE Ahmad M. Zawawi Eahmad.zawawi@gmail.comE Fayland Lam Efayland at gmail.comE Jerome Quelin Ejquelin@gmail.comE =head1 COPYRIGHT This software is Copyright E 2010 by Fayland Lam, Jerome Quelin. Also Copyright E 2012-2013 AUTHORS and "CONTRIBUTORS" as listed above. =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. =cut # Copyright 2008-2013 The Padre development team as listed in Padre.pm. # LICENSE # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl 5 itself. Padre-Plugin-SpellCheck-1.32/t/0002755000175000000500000000000012140566636014674 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/t/01-SpellCheck.t0000644000175000000500000000314312140454567017312 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use Test::More tests => 14; BEGIN { use_ok( 'Padre', '0.96' ); use_ok( 'Padre::Plugin', '0.96' ); use_ok( 'Padre::Unload', '0.96' ); use_ok( 'Padre::Locale', '0.96' ); use_ok( 'Padre::Logger', '0.96' ); use_ok( 'Padre::Wx', '0.96' ); use_ok( 'Padre::Wx::Role::Main', '0.96' ); use_ok( 'File::Which', '1.09' ); } ###### # let's check our subs/methods. ###### my @subs = qw( _config clean_dialog event_on_context_menu menu_plugins padre_interfaces plugin_disable plugin_enable plugin_icon plugin_name plugin_preferences spell_check ); BEGIN { use_ok( 'Padre::Plugin::SpellCheck', @subs ); } can_ok( 'Padre::Plugin::SpellCheck', @subs ); is( Padre::Plugin::SpellCheck::plugin_name(), 'Spell Checker', 'plugin name check' ); my @needs = Padre::Plugin::SpellCheck::padre_interfaces(); cmp_ok( @needs % 2, '==', 0, 'plugin interface check' ); ###### # let's check our lib's are here. ###### my $test_object; # require Padre::Plugin::SpellCheck::Preferences; # $test_object = new_ok('Padre::Plugin::SpellCheck::Preferences'); require Padre::Plugin::SpellCheck::FBP::Preferences; $test_object = new_ok('Padre::Plugin::SpellCheck::FBP::Preferences'); # require Padre::Plugin::SpellCheck::Engine; # $test_object = new_ok('Padre::Plugin::SpellCheck::Engine'); # require Padre::Plugin::SpellCheck::Checker; # $test_object = new_ok('Padre::Plugin::SpellCheck::Checker'); require Padre::Plugin::SpellCheck::FBP::Checker; $test_object = new_ok('Padre::Plugin::SpellCheck::FBP::Checker'); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/t/02-pod.t0000644000175000000500000000032512140213526016043 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use English qw( -no_match_vars ); local $OUTPUT_AUTOFLUSH = 1; use Test::More; use Test::Requires { 'Test::Pod' => 1.46 }; all_pod_files_ok(); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/t/05-Checker.t0000644000175000000500000000127012140530405016626 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use Test::More tests => 5; BEGIN { use_ok( 'Padre::Unload', '0.96' ); use_ok( 'Padre::Logger', '0.96' ); } ###### # let's check our subs/methods. ###### my @subs = qw( _next _on_ignore_all_clicked _on_ignore_clicked _on_replace_all_clicked _on_replace_clicked _replace _update new padre_locale_label _set_up ); BEGIN { use_ok( 'Padre::Plugin::SpellCheck::Checker', @subs ); } can_ok( 'Padre::Plugin::SpellCheck::Checker', @subs ); ###### # let's check our lib's are here. ###### my $test_object; require Padre::Plugin::SpellCheck::FBP::Preferences; $test_object = new_ok('Padre::Plugin::SpellCheck::FBP::Checker'); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/t/00-load.t0000644000175000000500000000034612140455433016206 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use Test::More tests => 1; BEGIN { use_ok('Padre::Plugin::SpellCheck'); } diag("Info: Testing Padre::Plugin::SpellCheck $Padre::Plugin::SpellCheck::VERSION"); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/t/06-Engine.t0000644000175000000500000000053212140214272016471 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use Test::More tests => 2; ###### # let's check our subs/methods. ###### my @subs = qw( _count_utf_chars _init check get_suggestions new set_ignore_word); BEGIN { use_ok( 'Padre::Plugin::SpellCheck::Engine', @subs ); } can_ok( 'Padre::Plugin::SpellCheck::Engine', @subs ); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/t/04-Preferences.t0000644000175000000500000000143112140213735017525 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use Test::More tests => 7; BEGIN { use_ok( 'Padre::Unload', '0.96' ); use_ok( 'Padre::Locale', '0.96' ); use_ok( 'Padre::Util', '0.96' ); use_ok( 'Padre::Logger', '0.96' ); } ###### # let's check our subs/methods. ###### my @subs = qw( _display_dictionaries _local_aspell_dictionaries _local_hunspell_dictionaries _on_button_save_clicked _set_up new on_dictionary_chosen padre_locale_label ); BEGIN { use_ok( 'Padre::Plugin::SpellCheck::Preferences', @subs ); } can_ok( 'Padre::Plugin::SpellCheck::Preferences', @subs ); ###### # let's check our lib's are here. ###### my $test_object; require Padre::Plugin::SpellCheck::FBP::Preferences; $test_object = new_ok('Padre::Plugin::SpellCheck::FBP::Preferences'); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/t/03-podcoverage.t0000644000175000000500000000105012140526704017561 0ustar kevinsrcuse strict; use warnings FATAL => 'all'; use English qw( -no_match_vars ); local $OUTPUT_AUTOFLUSH = 1; use Test::More; use Test::Requires { 'Test::Pod::Coverage' => 1.08 }; # Define the three overridden methods. my $trustme = { trustme => [qr/^(TRACE)$/] }; pod_coverage_ok( "Padre::Plugin::SpellCheck", $trustme ); pod_coverage_ok( "Padre::Plugin::SpellCheck::Checker", $trustme ); pod_coverage_ok( "Padre::Plugin::SpellCheck::Engine", $trustme ); pod_coverage_ok( "Padre::Plugin::SpellCheck::Preferences", $trustme ); done_testing(); __END__ Padre-Plugin-SpellCheck-1.32/MYMETA.json0000644000175000000500000000234012140566636016315 0ustar kevinsrc{ "abstract" : "Check spelling in Padre, The Perl IDE.", "author" : [ "Kevin Dawson " ], "dynamic_config" : 0, "generated_by" : "ExtUtils::MakeMaker version 6.66, CPAN::Meta::Converter version 2.130880", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : "2" }, "name" : "Padre-Plugin-SpellCheck", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "6.59", "Test::More" : "0.98", "Test::Requires" : "0.06" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { "Class::Accessor" : "0.34", "Encode" : "2.51", "File::Which" : "1.09", "Padre" : "0.98", "Text::Hunspell" : "2.08", "Try::Tiny" : "0.12", "constant" : "1.27", "parent" : "0.225", "perl" : "5.010001" } } }, "release_status" : "stable", "version" : "1.32" } Padre-Plugin-SpellCheck-1.32/inc/0002755000175000000500000000000012140566636015202 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/inc/Module/0002755000175000000500000000000012140566636016427 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/inc/Module/Install.pm0000644000175000000500000003013512140566634020371 0ustar kevinsrc#line 1 package Module::Install; # For any maintainers: # The load order for Module::Install is a bit magic. # It goes something like this... # # IF ( host has Module::Install installed, creating author mode ) { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install # 3. The installed version of inc::Module::Install loads # 4. inc::Module::Install calls "require Module::Install" # 5. The ./inc/ version of Module::Install loads # } ELSE { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install # 3. The ./inc/ version of Module::Install loads # } use 5.005; use strict 'vars'; use Cwd (); use File::Find (); use File::Path (); use vars qw{$VERSION $MAIN}; BEGIN { # All Module::Install core packages now require synchronised versions. # This will be used to ensure we don't accidentally load old or # different versions of modules. # This is not enforced yet, but will be some time in the next few # releases once we can make sure it won't clash with custom # Module::Install extensions. $VERSION = '1.06'; # Storage for the pseudo-singleton $MAIN = undef; *inc::Module::Install::VERSION = *VERSION; @inc::Module::Install::ISA = __PACKAGE__; } sub import { my $class = shift; my $self = $class->new(@_); my $who = $self->_caller; #------------------------------------------------------------- # all of the following checks should be included in import(), # to allow "eval 'require Module::Install; 1' to test # installation of Module::Install. (RT #51267) #------------------------------------------------------------- # Whether or not inc::Module::Install is actually loaded, the # $INC{inc/Module/Install.pm} is what will still get set as long as # the caller loaded module this in the documented manner. # If not set, the caller may NOT have loaded the bundled version, and thus # they may not have a MI version that works with the Makefile.PL. This would # result in false errors or unexpected behaviour. And we don't want that. my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm'; unless ( $INC{$file} ) { die <<"END_DIE" } Please invoke ${\__PACKAGE__} with: use inc::${\__PACKAGE__}; not: use ${\__PACKAGE__}; END_DIE # This reportedly fixes a rare Win32 UTC file time issue, but # as this is a non-cross-platform XS module not in the core, # we shouldn't really depend on it. See RT #24194 for detail. # (Also, this module only supports Perl 5.6 and above). eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006; # If the script that is loading Module::Install is from the future, # then make will detect this and cause it to re-run over and over # again. This is bad. Rather than taking action to touch it (which # is unreliable on some platforms and requires write permissions) # for now we should catch this and refuse to run. if ( -f $0 ) { my $s = (stat($0))[9]; # If the modification time is only slightly in the future, # sleep briefly to remove the problem. my $a = $s - time; if ( $a > 0 and $a < 5 ) { sleep 5 } # Too far in the future, throw an error. my $t = time; if ( $s > $t ) { die <<"END_DIE" } Your installer $0 has a modification time in the future ($s > $t). This is known to create infinite loops in make. Please correct this, then run $0 again. END_DIE } # Build.PL was formerly supported, but no longer is due to excessive # difficulty in implementing every single feature twice. if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" } Module::Install no longer supports Build.PL. It was impossible to maintain duel backends, and has been deprecated. Please remove all Build.PL files and only use the Makefile.PL installer. END_DIE #------------------------------------------------------------- # To save some more typing in Module::Install installers, every... # use inc::Module::Install # ...also acts as an implicit use strict. $^H |= strict::bits(qw(refs subs vars)); #------------------------------------------------------------- unless ( -f $self->{file} ) { foreach my $key (keys %INC) { delete $INC{$key} if $key =~ /Module\/Install/; } local $^W; require "$self->{path}/$self->{dispatch}.pm"; File::Path::mkpath("$self->{prefix}/$self->{author}"); $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self ); $self->{admin}->init; @_ = ($class, _self => $self); goto &{"$self->{name}::import"}; } local $^W; *{"${who}::AUTOLOAD"} = $self->autoload; $self->preload; # Unregister loader and worker packages so subdirs can use them again delete $INC{'inc/Module/Install.pm'}; delete $INC{'Module/Install.pm'}; # Save to the singleton $MAIN = $self; return 1; } sub autoload { my $self = shift; my $who = $self->_caller; my $cwd = Cwd::cwd(); my $sym = "${who}::AUTOLOAD"; $sym->{$cwd} = sub { my $pwd = Cwd::cwd(); if ( my $code = $sym->{$pwd} ) { # Delegate back to parent dirs goto &$code unless $cwd eq $pwd; } unless ($$sym =~ s/([^:]+)$//) { # XXX: it looks like we can't retrieve the missing function # via $$sym (usually $main::AUTOLOAD) in this case. # I'm still wondering if we should slurp Makefile.PL to # get some context or not ... my ($package, $file, $line) = caller; die <<"EOT"; Unknown function is found at $file line $line. Execution of $file aborted due to runtime errors. If you're a contributor to a project, you may need to install some Module::Install extensions from CPAN (or other repository). If you're a user of a module, please contact the author. EOT } my $method = $1; if ( uc($method) eq $method ) { # Do nothing return; } elsif ( $method =~ /^_/ and $self->can($method) ) { # Dispatch to the root M:I class return $self->$method(@_); } # Dispatch to the appropriate plugin unshift @_, ( $self, $1 ); goto &{$self->can('call')}; }; } sub preload { my $self = shift; unless ( $self->{extensions} ) { $self->load_extensions( "$self->{prefix}/$self->{path}", $self ); } my @exts = @{$self->{extensions}}; unless ( @exts ) { @exts = $self->{admin}->load_all_extensions; } my %seen; foreach my $obj ( @exts ) { while (my ($method, $glob) = each %{ref($obj) . '::'}) { next unless $obj->can($method); next if $method =~ /^_/; next if $method eq uc($method); $seen{$method}++; } } my $who = $self->_caller; foreach my $name ( sort keys %seen ) { local $^W; *{"${who}::$name"} = sub { ${"${who}::AUTOLOAD"} = "${who}::$name"; goto &{"${who}::AUTOLOAD"}; }; } } sub new { my ($class, %args) = @_; delete $INC{'FindBin.pm'}; { # to suppress the redefine warning local $SIG{__WARN__} = sub {}; require FindBin; } # ignore the prefix on extension modules built from top level. my $base_path = Cwd::abs_path($FindBin::Bin); unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) { delete $args{prefix}; } return $args{_self} if $args{_self}; $args{dispatch} ||= 'Admin'; $args{prefix} ||= 'inc'; $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author'); $args{bundle} ||= 'inc/BUNDLES'; $args{base} ||= $base_path; $class =~ s/^\Q$args{prefix}\E:://; $args{name} ||= $class; $args{version} ||= $class->VERSION; unless ( $args{path} ) { $args{path} = $args{name}; $args{path} =~ s!::!/!g; } $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm"; $args{wrote} = 0; bless( \%args, $class ); } sub call { my ($self, $method) = @_; my $obj = $self->load($method) or return; splice(@_, 0, 2, $obj); goto &{$obj->can($method)}; } sub load { my ($self, $method) = @_; $self->load_extensions( "$self->{prefix}/$self->{path}", $self ) unless $self->{extensions}; foreach my $obj (@{$self->{extensions}}) { return $obj if $obj->can($method); } my $admin = $self->{admin} or die <<"END_DIE"; The '$method' method does not exist in the '$self->{prefix}' path! Please remove the '$self->{prefix}' directory and run $0 again to load it. END_DIE my $obj = $admin->load($method, 1); push @{$self->{extensions}}, $obj; $obj; } sub load_extensions { my ($self, $path, $top) = @_; my $should_reload = 0; unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) { unshift @INC, $self->{prefix}; $should_reload = 1; } foreach my $rv ( $self->find_extensions($path) ) { my ($file, $pkg) = @{$rv}; next if $self->{pathnames}{$pkg}; local $@; my $new = eval { local $^W; require $file; $pkg->can('new') }; unless ( $new ) { warn $@ if $@; next; } $self->{pathnames}{$pkg} = $should_reload ? delete $INC{$file} : $INC{$file}; push @{$self->{extensions}}, &{$new}($pkg, _top => $top ); } $self->{extensions} ||= []; } sub find_extensions { my ($self, $path) = @_; my @found; File::Find::find( sub { my $file = $File::Find::name; return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is; my $subpath = $1; return if lc($subpath) eq lc($self->{dispatch}); $file = "$self->{path}/$subpath.pm"; my $pkg = "$self->{name}::$subpath"; $pkg =~ s!/!::!g; # If we have a mixed-case package name, assume case has been preserved # correctly. Otherwise, root through the file to locate the case-preserved # version of the package name. if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) { my $content = Module::Install::_read($subpath . '.pm'); my $in_pod = 0; foreach ( split //, $content ) { $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); # skip pod text next if /^\s*#/; # and comments if ( m/^\s*package\s+($pkg)\s*;/i ) { $pkg = $1; last; } } } push @found, [ $file, $pkg ]; }, $path ) if -d $path; @found; } ##################################################################### # Common Utility Functions sub _caller { my $depth = 0; my $call = caller($depth); while ( $call eq __PACKAGE__ ) { $depth++; $call = caller($depth); } return $call; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _read { local *FH; open( FH, '<', $_[0] ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_NEW sub _read { local *FH; open( FH, "< $_[0]" ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_OLD sub _readperl { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s; $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg; return $string; } sub _readpod { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; return $string if $_[0] =~ /\.pod\z/; $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg; $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg; $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg; $string =~ s/^\n+//s; return $string; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _write { local *FH; open( FH, '>', $_[0] ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_NEW sub _write { local *FH; open( FH, "> $_[0]" ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_OLD # _version is for processing module versions (eg, 1.03_05) not # Perl versions (eg, 5.8.1). sub _version ($) { my $s = shift || 0; my $d =()= $s =~ /(\.)/g; if ( $d >= 2 ) { # Normalise multipart versions $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg; } $s =~ s/^(\d+)\.?//; my $l = $1 || 0; my @v = map { $_ . '0' x (3 - length $_) } $s =~ /(\d{1,3})\D?/g; $l = $l . '.' . join '', @v if @v; return $l + 0; } sub _cmp ($$) { _version($_[1]) <=> _version($_[2]); } # Cloned from Params::Util::_CLASS sub _CLASS ($) { ( defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s ) ? $_[0] : undef; } 1; # Copyright 2008 - 2012 Adam Kennedy. Padre-Plugin-SpellCheck-1.32/inc/Module/Install/0002755000175000000500000000000012140566636020035 5ustar kevinsrcPadre-Plugin-SpellCheck-1.32/inc/Module/Install/Can.pm0000644000175000000500000000615712140566635021102 0ustar kevinsrc#line 1 package Module::Install::Can; use strict; use Config (); use ExtUtils::MakeMaker (); use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # check if we can load some module ### Upgrade this to not have to load the module if possible sub can_use { my ($self, $mod, $ver) = @_; $mod =~ s{::|\\}{/}g; $mod .= '.pm' unless $mod =~ /\.pm$/i; my $pkg = $mod; $pkg =~ s{/}{::}g; $pkg =~ s{\.pm$}{}i; local $@; eval { require $mod; $pkg->VERSION($ver || 0); 1 }; } # Check if we can run some command sub can_run { my ($self, $cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { next if $dir eq ''; require File::Spec; my $abs = File::Spec->catfile($dir, $cmd); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # Can our C compiler environment build XS files sub can_xs { my $self = shift; # Ensure we have the CBuilder module $self->configure_requires( 'ExtUtils::CBuilder' => 0.27 ); # Do we have the configure_requires checker? local $@; eval "require ExtUtils::CBuilder;"; if ( $@ ) { # They don't obey configure_requires, so it is # someone old and delicate. Try to avoid hurting # them by falling back to an older simpler test. return $self->can_cc(); } # Do we have a working C compiler my $builder = ExtUtils::CBuilder->new( quiet => 1, ); unless ( $builder->have_compiler ) { # No working C compiler return 0; } # Write a C file representative of what XS becomes require File::Temp; my ( $FH, $tmpfile ) = File::Temp::tempfile( "compilexs-XXXXX", SUFFIX => '.c', ); binmode $FH; print $FH <<'END_C'; #include "EXTERN.h" #include "perl.h" #include "XSUB.h" int main(int argc, char **argv) { return 0; } int boot_sanexs() { return 1; } END_C close $FH; # Can the C compiler access the same headers XS does my @libs = (); my $object = undef; eval { local $^W = 0; $object = $builder->compile( source => $tmpfile, ); @libs = $builder->link( objects => $object, module_name => 'sanexs', ); }; my $result = $@ ? 0 : 1; # Clean up all the build files foreach ( $tmpfile, $object, @libs ) { next unless defined $_; 1 while unlink; } return $result; } # Can we locate a (the) C compiler sub can_cc { my $self = shift; my @chunks = split(/ /, $Config::Config{cc}) or return; # $Config{cc} may contain args; try to find out the program part while (@chunks) { return $self->can_run("@chunks") || (pop(@chunks), next); } return; } # Fix Cygwin bug on maybe_command(); if ( $^O eq 'cygwin' ) { require ExtUtils::MM_Cygwin; require ExtUtils::MM_Win32; if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { *ExtUtils::MM_Cygwin::maybe_command = sub { my ($self, $file) = @_; if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { ExtUtils::MM_Win32->maybe_command($file); } else { ExtUtils::MM_Unix->maybe_command($file); } } } } 1; __END__ #line 236 Padre-Plugin-SpellCheck-1.32/inc/Module/Install/Win32.pm0000644000175000000500000000340312140566635021272 0ustar kevinsrc#line 1 package Module::Install::Win32; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # determine if the user needs nmake, and download it if needed sub check_nmake { my $self = shift; $self->load('can_run'); $self->load('get_file'); require Config; return unless ( $^O eq 'MSWin32' and $Config::Config{make} and $Config::Config{make} =~ /^nmake\b/i and ! $self->can_run('nmake') ); print "The required 'nmake' executable not found, fetching it...\n"; require File::Basename; my $rv = $self->get_file( url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe', ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe', local_dir => File::Basename::dirname($^X), size => 51928, run => 'Nmake15.exe /o > nul', check_for => 'Nmake.exe', remove => 1, ); die <<'END_MESSAGE' unless $rv; ------------------------------------------------------------------------------- Since you are using Microsoft Windows, you will need the 'nmake' utility before installation. It's available at: http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe or ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe Please download the file manually, save it to a directory in %PATH% (e.g. C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to that directory, and run "Nmake15.exe" from there; that will create the 'nmake.exe' file needed by this module. You may then resume the installation process described in README. ------------------------------------------------------------------------------- END_MESSAGE } 1; Padre-Plugin-SpellCheck-1.32/inc/Module/Install/WriteAll.pm0000644000175000000500000000237612140566635022123 0ustar kevinsrc#line 1 package Module::Install::WriteAll; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = qw{Module::Install::Base}; $ISCORE = 1; } sub WriteAll { my $self = shift; my %args = ( meta => 1, sign => 0, inline => 0, check_nmake => 1, @_, ); $self->sign(1) if $args{sign}; $self->admin->WriteAll(%args) if $self->is_admin; $self->check_nmake if $args{check_nmake}; unless ( $self->makemaker_args->{PL_FILES} ) { # XXX: This still may be a bit over-defensive... unless ($self->makemaker(6.25)) { $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL'; } } # Until ExtUtils::MakeMaker support MYMETA.yml, make sure # we clean it up properly ourself. $self->realclean_files('MYMETA.yml'); if ( $args{inline} ) { $self->Inline->write; } else { $self->Makefile->write; } # The Makefile write process adds a couple of dependencies, # so write the META.yml files after the Makefile. if ( $args{meta} ) { $self->Meta->write; } # Experimental support for MYMETA if ( $ENV{X_MYMETA} ) { if ( $ENV{X_MYMETA} eq 'JSON' ) { $self->Meta->write_mymeta_json; } else { $self->Meta->write_mymeta_yaml; } } return 1; } 1; Padre-Plugin-SpellCheck-1.32/inc/Module/Install/Fetch.pm0000644000175000000500000000462712140566635021432 0ustar kevinsrc#line 1 package Module::Install::Fetch; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub get_file { my ($self, %args) = @_; my ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) { $args{url} = $args{ftp_url} or (warn("LWP support unavailable!\n"), return); ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; } $|++; print "Fetching '$file' from $host... "; unless (eval { require Socket; Socket::inet_aton($host) }) { warn "'$host' resolve failed!\n"; return; } return unless $scheme eq 'ftp' or $scheme eq 'http'; require Cwd; my $dir = Cwd::getcwd(); chdir $args{local_dir} or return if exists $args{local_dir}; if (eval { require LWP::Simple; 1 }) { LWP::Simple::mirror($args{url}, $file); } elsif (eval { require Net::FTP; 1 }) { eval { # use Net::FTP to get past firewall my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600); $ftp->login("anonymous", 'anonymous@example.com'); $ftp->cwd($path); $ftp->binary; $ftp->get($file) or (warn("$!\n"), return); $ftp->quit; } } elsif (my $ftp = $self->can_run('ftp')) { eval { # no Net::FTP, fallback to ftp.exe require FileHandle; my $fh = FileHandle->new; local $SIG{CHLD} = 'IGNORE'; unless ($fh->open("|$ftp -n")) { warn "Couldn't open ftp: $!\n"; chdir $dir; return; } my @dialog = split(/\n/, <<"END_FTP"); open $host user anonymous anonymous\@example.com cd $path binary get $file $file quit END_FTP foreach (@dialog) { $fh->print("$_\n") } $fh->close; } } else { warn "No working 'ftp' program available!\n"; chdir $dir; return; } unless (-f $file) { warn "Fetching failed: $@\n"; chdir $dir; return; } return if exists $args{size} and -s $file != $args{size}; system($args{run}) if exists $args{run}; unlink($file) if $args{remove}; print(((!exists $args{check_for} or -e $args{check_for}) ? "done!" : "failed! ($!)"), "\n"); chdir $dir; return !$?; } 1; Padre-Plugin-SpellCheck-1.32/inc/Module/Install/Makefile.pm0000644000175000000500000002743712140566635022122 0ustar kevinsrc#line 1 package Module::Install::Makefile; use strict 'vars'; use ExtUtils::MakeMaker (); use Module::Install::Base (); use Fcntl qw/:flock :seek/; use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub Makefile { $_[0] } my %seen = (); sub prompt { shift; # Infinite loop protection my @c = caller(); if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) { die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])"; } # In automated testing or non-interactive session, always use defaults if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) { local $ENV{PERL_MM_USE_DEFAULT} = 1; goto &ExtUtils::MakeMaker::prompt; } else { goto &ExtUtils::MakeMaker::prompt; } } # Store a cleaned up version of the MakeMaker version, # since we need to behave differently in a variety of # ways based on the MM version. my $makemaker = eval $ExtUtils::MakeMaker::VERSION; # If we are passed a param, do a "newer than" comparison. # Otherwise, just return the MakeMaker version. sub makemaker { ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0 } # Ripped from ExtUtils::MakeMaker 6.56, and slightly modified # as we only need to know here whether the attribute is an array # or a hash or something else (which may or may not be appendable). my %makemaker_argtype = ( C => 'ARRAY', CONFIG => 'ARRAY', # CONFIGURE => 'CODE', # ignore DIR => 'ARRAY', DL_FUNCS => 'HASH', DL_VARS => 'ARRAY', EXCLUDE_EXT => 'ARRAY', EXE_FILES => 'ARRAY', FUNCLIST => 'ARRAY', H => 'ARRAY', IMPORTS => 'HASH', INCLUDE_EXT => 'ARRAY', LIBS => 'ARRAY', # ignore '' MAN1PODS => 'HASH', MAN3PODS => 'HASH', META_ADD => 'HASH', META_MERGE => 'HASH', PL_FILES => 'HASH', PM => 'HASH', PMLIBDIRS => 'ARRAY', PMLIBPARENTDIRS => 'ARRAY', PREREQ_PM => 'HASH', CONFIGURE_REQUIRES => 'HASH', SKIP => 'ARRAY', TYPEMAPS => 'ARRAY', XS => 'HASH', # VERSION => ['version',''], # ignore # _KEEP_AFTER_FLUSH => '', clean => 'HASH', depend => 'HASH', dist => 'HASH', dynamic_lib=> 'HASH', linkext => 'HASH', macro => 'HASH', postamble => 'HASH', realclean => 'HASH', test => 'HASH', tool_autosplit => 'HASH', # special cases where you can use makemaker_append CCFLAGS => 'APPENDABLE', DEFINE => 'APPENDABLE', INC => 'APPENDABLE', LDDLFLAGS => 'APPENDABLE', LDFROM => 'APPENDABLE', ); sub makemaker_args { my ($self, %new_args) = @_; my $args = ( $self->{makemaker_args} ||= {} ); foreach my $key (keys %new_args) { if ($makemaker_argtype{$key}) { if ($makemaker_argtype{$key} eq 'ARRAY') { $args->{$key} = [] unless defined $args->{$key}; unless (ref $args->{$key} eq 'ARRAY') { $args->{$key} = [$args->{$key}] } push @{$args->{$key}}, ref $new_args{$key} eq 'ARRAY' ? @{$new_args{$key}} : $new_args{$key}; } elsif ($makemaker_argtype{$key} eq 'HASH') { $args->{$key} = {} unless defined $args->{$key}; foreach my $skey (keys %{ $new_args{$key} }) { $args->{$key}{$skey} = $new_args{$key}{$skey}; } } elsif ($makemaker_argtype{$key} eq 'APPENDABLE') { $self->makemaker_append($key => $new_args{$key}); } } else { if (defined $args->{$key}) { warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n}; } $args->{$key} = $new_args{$key}; } } return $args; } # For mm args that take multiple space-seperated args, # append an argument to the current list. sub makemaker_append { my $self = shift; my $name = shift; my $args = $self->makemaker_args; $args->{$name} = defined $args->{$name} ? join( ' ', $args->{$name}, @_ ) : join( ' ', @_ ); } sub build_subdirs { my $self = shift; my $subdirs = $self->makemaker_args->{DIR} ||= []; for my $subdir (@_) { push @$subdirs, $subdir; } } sub clean_files { my $self = shift; my $clean = $self->makemaker_args->{clean} ||= {}; %$clean = ( %$clean, FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_), ); } sub realclean_files { my $self = shift; my $realclean = $self->makemaker_args->{realclean} ||= {}; %$realclean = ( %$realclean, FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_), ); } sub libs { my $self = shift; my $libs = ref $_[0] ? shift : [ shift ]; $self->makemaker_args( LIBS => $libs ); } sub inc { my $self = shift; $self->makemaker_args( INC => shift ); } sub _wanted_t { } sub tests_recursive { my $self = shift; my $dir = shift || 't'; unless ( -d $dir ) { die "tests_recursive dir '$dir' does not exist"; } my %tests = map { $_ => 1 } split / /, ($self->tests || ''); require File::Find; File::Find::find( sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 }, $dir ); $self->tests( join ' ', sort keys %tests ); } sub write { my $self = shift; die "&Makefile->write() takes no arguments\n" if @_; # Check the current Perl version my $perl_version = $self->perl_version; if ( $perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; } # Make sure we have a new enough MakeMaker require ExtUtils::MakeMaker; if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) { # This previous attempted to inherit the version of # ExtUtils::MakeMaker in use by the module author, but this # was found to be untenable as some authors build releases # using future dev versions of EU:MM that nobody else has. # Instead, #toolchain suggests we use 6.59 which is the most # stable version on CPAN at time of writing and is, to quote # ribasushi, "not terminally fucked, > and tested enough". # TODO: We will now need to maintain this over time to push # the version up as new versions are released. $self->build_requires( 'ExtUtils::MakeMaker' => 6.59 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.59 ); } else { # Allow legacy-compatibility with 5.005 by depending on the # most recent EU:MM that supported 5.005. $self->build_requires( 'ExtUtils::MakeMaker' => 6.36 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.36 ); } # Generate the MakeMaker params my $args = $self->makemaker_args; $args->{DISTNAME} = $self->name; $args->{NAME} = $self->module_name || $self->name; $args->{NAME} =~ s/-/::/g; $args->{VERSION} = $self->version or die <<'EOT'; ERROR: Can't determine distribution version. Please specify it explicitly via 'version' in Makefile.PL, or set a valid $VERSION in a module, and provide its file path via 'version_from' (or 'all_from' if you prefer) in Makefile.PL. EOT if ( $self->tests ) { my @tests = split ' ', $self->tests; my %seen; $args->{test} = { TESTS => (join ' ', grep {!$seen{$_}++} @tests), }; } elsif ( $Module::Install::ExtraTests::use_extratests ) { # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness. # So, just ignore our xt tests here. } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) { $args->{test} = { TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ), }; } if ( $] >= 5.005 ) { $args->{ABSTRACT} = $self->abstract; $args->{AUTHOR} = join ', ', @{$self->author || []}; } if ( $self->makemaker(6.10) ) { $args->{NO_META} = 1; #$args->{NO_MYMETA} = 1; } if ( $self->makemaker(6.17) and $self->sign ) { $args->{SIGN} = 1; } unless ( $self->is_admin ) { delete $args->{SIGN}; } if ( $self->makemaker(6.31) and $self->license ) { $args->{LICENSE} = $self->license; } my $prereq = ($args->{PREREQ_PM} ||= {}); %$prereq = ( %$prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->requires) ); # Remove any reference to perl, PREREQ_PM doesn't support it delete $args->{PREREQ_PM}->{perl}; # Merge both kinds of requires into BUILD_REQUIRES my $build_prereq = ($args->{BUILD_REQUIRES} ||= {}); %$build_prereq = ( %$build_prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->configure_requires, $self->build_requires) ); # Remove any reference to perl, BUILD_REQUIRES doesn't support it delete $args->{BUILD_REQUIRES}->{perl}; # Delete bundled dists from prereq_pm, add it to Makefile DIR my $subdirs = ($args->{DIR} || []); if ($self->bundles) { my %processed; foreach my $bundle (@{ $self->bundles }) { my ($mod_name, $dist_dir) = @$bundle; delete $prereq->{$mod_name}; $dist_dir = File::Basename::basename($dist_dir); # dir for building this module if (not exists $processed{$dist_dir}) { if (-d $dist_dir) { # List as sub-directory to be processed by make push @$subdirs, $dist_dir; } # Else do nothing: the module is already present on the system $processed{$dist_dir} = undef; } } } unless ( $self->makemaker('6.55_03') ) { %$prereq = (%$prereq,%$build_prereq); delete $args->{BUILD_REQUIRES}; } if ( my $perl_version = $self->perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; if ( $self->makemaker(6.48) ) { $args->{MIN_PERL_VERSION} = $perl_version; } } if ($self->installdirs) { warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS}; $args->{INSTALLDIRS} = $self->installdirs; } my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_} ) } keys %$args; my $user_preop = delete $args{dist}->{PREOP}; if ( my $preop = $self->admin->preop($user_preop) ) { foreach my $key ( keys %$preop ) { $args{dist}->{$key} = $preop->{$key}; } } my $mm = ExtUtils::MakeMaker::WriteMakefile(%args); $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile'); } sub fix_up_makefile { my $self = shift; my $makefile_name = shift; my $top_class = ref($self->_top) || ''; my $top_version = $self->_top->VERSION || ''; my $preamble = $self->preamble ? "# Preamble by $top_class $top_version\n" . $self->preamble : ''; my $postamble = "# Postamble by $top_class $top_version\n" . ($self->postamble || ''); local *MAKEFILE; open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!"; eval { flock MAKEFILE, LOCK_EX }; my $makefile = do { local $/; }; $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /; $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g; $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g; $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m; $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m; # Module::Install will never be used to build the Core Perl # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m; #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m; # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well. $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g; # XXX - This is currently unused; not sure if it breaks other MM-users # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg; seek MAKEFILE, 0, SEEK_SET; truncate MAKEFILE, 0; print MAKEFILE "$preamble$makefile$postamble" or die $!; close MAKEFILE or die $!; 1; } sub preamble { my ($self, $text) = @_; $self->{preamble} = $text . $self->{preamble} if defined $text; $self->{preamble}; } sub postamble { my ($self, $text) = @_; $self->{postamble} ||= $self->admin->postamble; $self->{postamble} .= $text if defined $text; $self->{postamble} } 1; __END__ #line 544 Padre-Plugin-SpellCheck-1.32/inc/Module/Install/Share.pm0000644000175000000500000000464312140566635021441 0ustar kevinsrc#line 1 package Module::Install::Share; use strict; use Module::Install::Base (); use File::Find (); use ExtUtils::Manifest (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub install_share { my $self = shift; my $dir = @_ ? pop : 'share'; my $type = @_ ? shift : 'dist'; unless ( defined $type and $type eq 'module' or $type eq 'dist' ) { die "Illegal or invalid share dir type '$type'"; } unless ( defined $dir and -d $dir ) { require Carp; Carp::croak("Illegal or missing directory install_share param: '$dir'"); } # Split by type my $S = ($^O eq 'MSWin32') ? "\\" : "\/"; my $root; if ( $type eq 'dist' ) { die "Too many parameters to install_share" if @_; # Set up the install $root = "\$(INST_LIB)${S}auto${S}share${S}dist${S}\$(DISTNAME)"; } else { my $module = Module::Install::_CLASS($_[0]); unless ( defined $module ) { die "Missing or invalid module name '$_[0]'"; } $module =~ s/::/-/g; $root = "\$(INST_LIB)${S}auto${S}share${S}module${S}$module"; } my $manifest = -r 'MANIFEST' ? ExtUtils::Manifest::maniread() : undef; my $skip_checker = $ExtUtils::Manifest::VERSION >= 1.54 ? ExtUtils::Manifest::maniskip() : ExtUtils::Manifest::_maniskip(); my $postamble = ''; my $perm_dir = eval($ExtUtils::MakeMaker::VERSION) >= 6.52 ? '$(PERM_DIR)' : 755; File::Find::find({ no_chdir => 1, wanted => sub { my $path = File::Spec->abs2rel($_, $dir); if (-d $_) { return if $skip_checker->($File::Find::name); $postamble .=<<"END"; \t\$(NOECHO) \$(MKPATH) "$root${S}$path" \t\$(NOECHO) \$(CHMOD) $perm_dir "$root${S}$path" END } else { return if ref $manifest && !exists $manifest->{$File::Find::name}; return if $skip_checker->($File::Find::name); $postamble .=<<"END"; \t\$(NOECHO) \$(CP) "$dir${S}$path" "$root${S}$path" END } }, }, $dir); # Set up the install $self->postamble(<<"END_MAKEFILE"); config :: $postamble END_MAKEFILE # The above appears to behave incorrectly when used with old versions # of ExtUtils::Install (known-bad on RHEL 3, with 5.8.0) # So when we need to install a share directory, make sure we add a # dependency on a moderately new version of ExtUtils::MakeMaker. $self->build_requires( 'ExtUtils::MakeMaker' => '6.11' ); # 99% of the time we don't want to index a shared dir $self->no_index( directory => $dir ); } 1; __END__ #line 154 Padre-Plugin-SpellCheck-1.32/inc/Module/Install/Metadata.pm0000644000175000000500000004327712140566635022125 0ustar kevinsrc#line 1 package Module::Install::Metadata; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } my @boolean_keys = qw{ sign }; my @scalar_keys = qw{ name module_name abstract version distribution_type tests installdirs }; my @tuple_keys = qw{ configure_requires build_requires requires recommends bundles resources }; my @resource_keys = qw{ homepage bugtracker repository }; my @array_keys = qw{ keywords author }; *authors = \&author; sub Meta { shift } sub Meta_BooleanKeys { @boolean_keys } sub Meta_ScalarKeys { @scalar_keys } sub Meta_TupleKeys { @tuple_keys } sub Meta_ResourceKeys { @resource_keys } sub Meta_ArrayKeys { @array_keys } foreach my $key ( @boolean_keys ) { *$key = sub { my $self = shift; if ( defined wantarray and not @_ ) { return $self->{values}->{$key}; } $self->{values}->{$key} = ( @_ ? $_[0] : 1 ); return $self; }; } foreach my $key ( @scalar_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} = shift; return $self; }; } foreach my $key ( @array_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} ||= []; push @{$self->{values}->{$key}}, @_; return $self; }; } foreach my $key ( @resource_keys ) { *$key = sub { my $self = shift; unless ( @_ ) { return () unless $self->{values}->{resources}; return map { $_->[1] } grep { $_->[0] eq $key } @{ $self->{values}->{resources} }; } return $self->{values}->{resources}->{$key} unless @_; my $uri = shift or die( "Did not provide a value to $key()" ); $self->resources( $key => $uri ); return 1; }; } foreach my $key ( grep { $_ ne "resources" } @tuple_keys) { *$key = sub { my $self = shift; return $self->{values}->{$key} unless @_; my @added; while ( @_ ) { my $module = shift or last; my $version = shift || 0; push @added, [ $module, $version ]; } push @{ $self->{values}->{$key} }, @added; return map {@$_} @added; }; } # Resource handling my %lc_resource = map { $_ => 1 } qw{ homepage license bugtracker repository }; sub resources { my $self = shift; while ( @_ ) { my $name = shift or last; my $value = shift or next; if ( $name eq lc $name and ! $lc_resource{$name} ) { die("Unsupported reserved lowercase resource '$name'"); } $self->{values}->{resources} ||= []; push @{ $self->{values}->{resources} }, [ $name, $value ]; } $self->{values}->{resources}; } # Aliases for build_requires that will have alternative # meanings in some future version of META.yml. sub test_requires { shift->build_requires(@_) } sub install_requires { shift->build_requires(@_) } # Aliases for installdirs options sub install_as_core { $_[0]->installdirs('perl') } sub install_as_cpan { $_[0]->installdirs('site') } sub install_as_site { $_[0]->installdirs('site') } sub install_as_vendor { $_[0]->installdirs('vendor') } sub dynamic_config { my $self = shift; my $value = @_ ? shift : 1; if ( $self->{values}->{dynamic_config} ) { # Once dynamic we never change to static, for safety return 0; } $self->{values}->{dynamic_config} = $value ? 1 : 0; return 1; } # Convenience command sub static_config { shift->dynamic_config(0); } sub perl_version { my $self = shift; return $self->{values}->{perl_version} unless @_; my $version = shift or die( "Did not provide a value to perl_version()" ); # Normalize the version $version = $self->_perl_version($version); # We don't support the really old versions unless ( $version >= 5.005 ) { die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n"; } $self->{values}->{perl_version} = $version; } sub all_from { my ( $self, $file ) = @_; unless ( defined($file) ) { my $name = $self->name or die( "all_from called with no args without setting name() first" ); $file = join('/', 'lib', split(/-/, $name)) . '.pm'; $file =~ s{.*/}{} unless -e $file; unless ( -e $file ) { die("all_from cannot find $file from $name"); } } unless ( -f $file ) { die("The path '$file' does not exist, or is not a file"); } $self->{values}{all_from} = $file; # Some methods pull from POD instead of code. # If there is a matching .pod, use that instead my $pod = $file; $pod =~ s/\.pm$/.pod/i; $pod = $file unless -e $pod; # Pull the different values $self->name_from($file) unless $self->name; $self->version_from($file) unless $self->version; $self->perl_version_from($file) unless $self->perl_version; $self->author_from($pod) unless @{$self->author || []}; $self->license_from($pod) unless $self->license; $self->abstract_from($pod) unless $self->abstract; return 1; } sub provides { my $self = shift; my $provides = ( $self->{values}->{provides} ||= {} ); %$provides = (%$provides, @_) if @_; return $provides; } sub auto_provides { my $self = shift; return $self unless $self->is_admin; unless (-e 'MANIFEST') { warn "Cannot deduce auto_provides without a MANIFEST, skipping\n"; return $self; } # Avoid spurious warnings as we are not checking manifest here. local $SIG{__WARN__} = sub {1}; require ExtUtils::Manifest; local *ExtUtils::Manifest::manicheck = sub { return }; require Module::Build; my $build = Module::Build->new( dist_name => $self->name, dist_version => $self->version, license => $self->license, ); $self->provides( %{ $build->find_dist_packages || {} } ); } sub feature { my $self = shift; my $name = shift; my $features = ( $self->{values}->{features} ||= [] ); my $mods; if ( @_ == 1 and ref( $_[0] ) ) { # The user used ->feature like ->features by passing in the second # argument as a reference. Accomodate for that. $mods = $_[0]; } else { $mods = \@_; } my $count = 0; push @$features, ( $name => [ map { ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_ } @$mods ] ); return @$features; } sub features { my $self = shift; while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { $self->feature( $name, @$mods ); } return $self->{values}->{features} ? @{ $self->{values}->{features} } : (); } sub no_index { my $self = shift; my $type = shift; push @{ $self->{values}->{no_index}->{$type} }, @_ if $type; return $self->{values}->{no_index}; } sub read { my $self = shift; $self->include_deps( 'YAML::Tiny', 0 ); require YAML::Tiny; my $data = YAML::Tiny::LoadFile('META.yml'); # Call methods explicitly in case user has already set some values. while ( my ( $key, $value ) = each %$data ) { next unless $self->can($key); if ( ref $value eq 'HASH' ) { while ( my ( $module, $version ) = each %$value ) { $self->can($key)->($self, $module => $version ); } } else { $self->can($key)->($self, $value); } } return $self; } sub write { my $self = shift; return $self unless $self->is_admin; $self->admin->write_meta; return $self; } sub version_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->version( ExtUtils::MM_Unix->parse_version($file) ); # for version integrity check $self->makemaker_args( VERSION_FROM => $file ); } sub abstract_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->abstract( bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix' )->parse_abstract($file) ); } # Add both distribution and module name sub name_from { my ($self, $file) = @_; if ( Module::Install::_read($file) =~ m/ ^ \s* package \s* ([\w:]+) \s* ; /ixms ) { my ($name, $module_name) = ($1, $1); $name =~ s{::}{-}g; $self->name($name); unless ( $self->module_name ) { $self->module_name($module_name); } } else { die("Cannot determine name from $file\n"); } } sub _extract_perl_version { if ( $_[0] =~ m/ ^\s* (?:use|require) \s* v? ([\d_\.]+) \s* ; /ixms ) { my $perl_version = $1; $perl_version =~ s{_}{}g; return $perl_version; } else { return; } } sub perl_version_from { my $self = shift; my $perl_version=_extract_perl_version(Module::Install::_read($_[0])); if ($perl_version) { $self->perl_version($perl_version); } else { warn "Cannot determine perl version info from $_[0]\n"; return; } } sub author_from { my $self = shift; my $content = Module::Install::_read($_[0]); if ($content =~ m/ =head \d \s+ (?:authors?)\b \s* ([^\n]*) | =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s* .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s* ([^\n]*) /ixms) { my $author = $1 || $2; # XXX: ugly but should work anyway... if (eval "require Pod::Escapes; 1") { # Pod::Escapes has a mapping table. # It's in core of perl >= 5.9.3, and should be installed # as one of the Pod::Simple's prereqs, which is a prereq # of Pod::Text 3.x (see also below). $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $Pod::Escapes::Name2character_number{$1} ? chr($Pod::Escapes::Name2character_number{$1}) : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) { # Pod::Text < 3.0 has yet another mapping table, # though the table name of 2.x and 1.x are different. # (1.x is in core of Perl < 5.6, 2.x is in core of # Perl < 5.9.3) my $mapping = ($Pod::Text::VERSION < 2) ? \%Pod::Text::HTML_Escapes : \%Pod::Text::ESCAPES; $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $mapping->{$1} ? $mapping->{$1} : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } else { $author =~ s{E}{<}g; $author =~ s{E}{>}g; } $self->author($author); } else { warn "Cannot determine author info from $_[0]\n"; } } #Stolen from M::B my %license_urls = ( perl => 'http://dev.perl.org/licenses/', apache => 'http://apache.org/licenses/LICENSE-2.0', apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1', artistic => 'http://opensource.org/licenses/artistic-license.php', artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php', lgpl => 'http://opensource.org/licenses/lgpl-license.php', lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php', lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html', bsd => 'http://opensource.org/licenses/bsd-license.php', gpl => 'http://opensource.org/licenses/gpl-license.php', gpl2 => 'http://opensource.org/licenses/gpl-2.0.php', gpl3 => 'http://opensource.org/licenses/gpl-3.0.html', mit => 'http://opensource.org/licenses/mit-license.php', mozilla => 'http://opensource.org/licenses/mozilla1.1.php', open_source => undef, unrestricted => undef, restrictive => undef, unknown => undef, ); sub license { my $self = shift; return $self->{values}->{license} unless @_; my $license = shift or die( 'Did not provide a value to license()' ); $license = __extract_license($license) || lc $license; $self->{values}->{license} = $license; # Automatically fill in license URLs if ( $license_urls{$license} ) { $self->resources( license => $license_urls{$license} ); } return 1; } sub _extract_license { my $pod = shift; my $matched; return __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?) (=head \d.*|=cut.*|)\z /xms ) || __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?) (=head \d.*|=cut.*|)\z /xms ); } sub __extract_license { my $license_text = shift or return; my @phrases = ( '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1, '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1, 'Artistic and GPL' => 'perl', 1, 'GNU general public license' => 'gpl', 1, 'GNU public license' => 'gpl', 1, 'GNU lesser general public license' => 'lgpl', 1, 'GNU lesser public license' => 'lgpl', 1, 'GNU library general public license' => 'lgpl', 1, 'GNU library public license' => 'lgpl', 1, 'GNU Free Documentation license' => 'unrestricted', 1, 'GNU Affero General Public License' => 'open_source', 1, '(?:Free)?BSD license' => 'bsd', 1, 'Artistic license 2\.0' => 'artistic_2', 1, 'Artistic license' => 'artistic', 1, 'Apache (?:Software )?license' => 'apache', 1, 'GPL' => 'gpl', 1, 'LGPL' => 'lgpl', 1, 'BSD' => 'bsd', 1, 'Artistic' => 'artistic', 1, 'MIT' => 'mit', 1, 'Mozilla Public License' => 'mozilla', 1, 'Q Public License' => 'open_source', 1, 'OpenSSL License' => 'unrestricted', 1, 'SSLeay License' => 'unrestricted', 1, 'zlib License' => 'open_source', 1, 'proprietary' => 'proprietary', 0, ); while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) { $pattern =~ s#\s+#\\s+#gs; if ( $license_text =~ /\b$pattern\b/i ) { return $license; } } return ''; } sub license_from { my $self = shift; if (my $license=_extract_license(Module::Install::_read($_[0]))) { $self->license($license); } else { warn "Cannot determine license info from $_[0]\n"; return 'unknown'; } } sub _extract_bugtracker { my @links = $_[0] =~ m#L<( https?\Q://rt.cpan.org/\E[^>]+| https?\Q://github.com/\E[\w_]+/[\w_]+/issues| https?\Q://code.google.com/p/\E[\w_\-]+/issues/list )>#gx; my %links; @links{@links}=(); @links=keys %links; return @links; } sub bugtracker_from { my $self = shift; my $content = Module::Install::_read($_[0]); my @links = _extract_bugtracker($content); unless ( @links ) { warn "Cannot determine bugtracker info from $_[0]\n"; return 0; } if ( @links > 1 ) { warn "Found more than one bugtracker link in $_[0]\n"; return 0; } # Set the bugtracker bugtracker( $links[0] ); return 1; } sub requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+(v?[\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->requires( $module => $version ); } } sub test_requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->test_requires( $module => $version ); } } # Convert triple-part versions (eg, 5.6.1 or 5.8.9) to # numbers (eg, 5.006001 or 5.008009). # Also, convert double-part versions (eg, 5.8) sub _perl_version { my $v = $_[-1]; $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e; $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e; $v =~ s/(\.\d\d\d)000$/$1/; $v =~ s/_.+$//; if ( ref($v) ) { # Numify $v = $v + 0; } return $v; } sub add_metadata { my $self = shift; my %hash = @_; for my $key (keys %hash) { warn "add_metadata: $key is not prefixed with 'x_'.\n" . "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/; $self->{values}->{$key} = $hash{$key}; } } ###################################################################### # MYMETA Support sub WriteMyMeta { die "WriteMyMeta has been deprecated"; } sub write_mymeta_yaml { my $self = shift; # We need YAML::Tiny to write the MYMETA.yml file unless ( eval { require YAML::Tiny; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.yml\n"; YAML::Tiny::DumpFile('MYMETA.yml', $meta); } sub write_mymeta_json { my $self = shift; # We need JSON to write the MYMETA.json file unless ( eval { require JSON; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.json\n"; Module::Install::_write( 'MYMETA.json', JSON->new->pretty(1)->canonical->encode($meta), ); } sub _write_mymeta_data { my $self = shift; # If there's no existing META.yml there is nothing we can do return undef unless -f 'META.yml'; # We need Parse::CPAN::Meta to load the file unless ( eval { require Parse::CPAN::Meta; 1; } ) { return undef; } # Merge the perl version into the dependencies my $val = $self->Meta->{values}; my $perl = delete $val->{perl_version}; if ( $perl ) { $val->{requires} ||= []; my $requires = $val->{requires}; # Canonize to three-dot version after Perl 5.6 if ( $perl >= 5.006 ) { $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e } unshift @$requires, [ perl => $perl ]; } # Load the advisory META.yml file my @yaml = Parse::CPAN::Meta::LoadFile('META.yml'); my $meta = $yaml[0]; # Overwrite the non-configure dependency hashs delete $meta->{requires}; delete $meta->{build_requires}; delete $meta->{recommends}; if ( exists $val->{requires} ) { $meta->{requires} = { map { @$_ } @{ $val->{requires} } }; } if ( exists $val->{build_requires} ) { $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } }; } return $meta; } 1; Padre-Plugin-SpellCheck-1.32/inc/Module/Install/DSL.pm0000644000175000000500000000457012140566635021020 0ustar kevinsrc#line 1 package Module::Install::DSL; use strict; use vars qw{$VERSION $ISCORE}; BEGIN { $VERSION = '1.06'; $ISCORE = 1; *inc::Module::Install::DSL::VERSION = *VERSION; @inc::Module::Install::DSL::ISA = __PACKAGE__; } sub import { # Read in the rest of the Makefile.PL open 0 or die "Couldn't open $0: $!"; my $dsl; SCOPE: { local $/ = undef; $dsl = join "", <0>; } # Change inc::Module::Install::DSL to the regular one. # Remove anything before the use inc::... line. $dsl =~ s/.*?^\s*use\s+(?:inc::)?Module::Install::DSL(\b[^;]*);\s*\n//sm; # Load inc::Module::Install as we would in a regular Makefile.Pl SCOPE: { package main; require inc::Module::Install; inc::Module::Install->import; } # Add the ::DSL plugin to the list of packages in /inc my $admin = $Module::Install::MAIN->{admin}; if ( $admin ) { my $from = $INC{"$admin->{path}/DSL.pm"}; my $to = "$admin->{base}/$admin->{prefix}/$admin->{path}/DSL.pm"; $admin->copy( $from => $to ); } # Convert the basic syntax to code my $code = "INIT {\n" . "package main;\n\n" . dsl2code($dsl) . "\n\nWriteAll();\n" . "}\n"; # Execute the script eval $code; print STDERR "Failed to execute the generated code...\n$@" if $@; exit(0); } sub dsl2code { my $dsl = shift; # Split into lines and strip blanks my @lines = grep { /\S/ } split /[\012\015]+/, $dsl; # Each line represents one command my @code = (); my $static = 1; foreach my $line ( @lines ) { # Split the lines into tokens my @tokens = split /\s+/, $line; # The first word is the command my $command = shift @tokens; my @params = (); my @suffix = (); while ( @tokens ) { my $token = shift @tokens; if ( $token eq 'if' or $token eq 'unless' ) { # This is the beginning of a suffix push @suffix, $token; push @suffix, @tokens; # The conditional means this distribution # can no longer be considered fully static. $static = 0; last; } else { # Convert to a string $token =~ s/([\\\'])/\\$1/g; push @params, "'$token'"; } }; # Merge to create the final line of code @tokens = ( $command, @params ? join( ', ', @params ) : (), @suffix ); push @code, join( ' ', @tokens ) . ";\n"; } # Is our configuration static? push @code, "static_config;\n" if $static; # Join into the complete code block return join( '', @code ); } 1; Padre-Plugin-SpellCheck-1.32/inc/Module/Install/With.pm0000644000175000000500000000224612140566635021307 0ustar kevinsrc#line 1 package Module::Install::With; # See POD at end for docs use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } ##################################################################### # Installer Target # Are we targeting ExtUtils::MakeMaker (running as Makefile.PL) sub eumm { !! ($0 =~ /Makefile.PL$/i); } # You should not be using this, but we'll keep the hook anyways sub mb { !! ($0 =~ /Build.PL$/i); } ##################################################################### # Testing and Configuration Contexts #line 49 sub interactive { # Treat things interactively ONLY based on input !! (-t STDIN and ! automated_testing()); } #line 67 sub automated_testing { !! $ENV{AUTOMATED_TESTING}; } #line 86 sub release_testing { !! $ENV{RELEASE_TESTING}; } sub author_context { !! $Module::Install::AUTHOR; } ##################################################################### # Operating System Convenience #line 114 sub win32 { !! ($^O eq 'MSWin32'); } #line 131 sub winlike { !! ($^O eq 'MSWin32' or $^O eq 'cygwin'); } 1; #line 159 Padre-Plugin-SpellCheck-1.32/inc/Module/Install/Base.pm0000644000175000000500000000214712140566635021246 0ustar kevinsrc#line 1 package Module::Install::Base; use strict 'vars'; use vars qw{$VERSION}; BEGIN { $VERSION = '1.06'; } # Suspend handler for "redefined" warnings BEGIN { my $w = $SIG{__WARN__}; $SIG{__WARN__} = sub { $w }; } #line 42 sub new { my $class = shift; unless ( defined &{"${class}::call"} ) { *{"${class}::call"} = sub { shift->_top->call(@_) }; } unless ( defined &{"${class}::load"} ) { *{"${class}::load"} = sub { shift->_top->load(@_) }; } bless { @_ }, $class; } #line 61 sub AUTOLOAD { local $@; my $func = eval { shift->_top->autoload } or return; goto &$func; } #line 75 sub _top { $_[0]->{_top}; } #line 90 sub admin { $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new; } #line 106 sub is_admin { ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin'); } sub DESTROY {} package Module::Install::Base::FakeAdmin; use vars qw{$VERSION}; BEGIN { $VERSION = $Module::Install::Base::VERSION; } my $fake; sub new { $fake ||= bless(\@_, $_[0]); } sub AUTOLOAD {} sub DESTROY {} # Restore warning handler BEGIN { $SIG{__WARN__} = $SIG{__WARN__}->(); } 1; #line 159