// Copyright (c) 2008, Simone Cociancich // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither the name of the Aegisub Group nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. // // ----------------------------------------------------------------------------- // // AEGISUB // // Website: http://aegisub.cellosoft.com // Contact: mailto:jiifurusu@gmail.com // #include "config.h" #ifdef WITH_PERL #include "auto4_perl.h" #include "version.h" #include "standard_paths.h" #include #include #ifdef __VISUALC__ #pragma warning(disable: 4800) #pragma warning(disable: 4706) #endif namespace Automation4 { ////////////////////// // PerlScript class // PerlScript *PerlScript::active = NULL; PerlScript::PerlScript(const wxString &filename): Script(filename) { // Create a package name for the script package.Printf(_T("Aegisub::Script::p%lx"), this); // local @INC; # lol inc_saved = newAV(); // Buggy reload = false; mtime = 0; // Load the script load(); } PerlScript::~PerlScript() { unload(); } void PerlScript::Reload() { unload(); reload = false; load(); } void PerlScript::load() { wxTRACE_METH(load); wxLogTrace(wxTRACE_AutoPerl, _T("filename = '%s', package = '%s'"), GetFilename().c_str(), package.c_str()); // Feed some defaults into the script info name = GetPrettyFilename().BeforeLast(_T('.')); description = _("Perl script"); author = wxGetUserId(); version = GetAegisubShortVersionString(); wxFileName fn(GetFilename()); wxDateTime mod; fn.GetTimes(NULL,&mod,NULL); mtime = mod.GetTicks(); // Create the script's package gv_stashpv(package.mb_str(wx2pl), 1); // Set this script as active activate(this); // 'Enclose' the script into its package wxString _script = _T("package ") + package + _T(";\n") _T("require Aegisub; require Aegisub::Script; require Aegisub::Progress;") // Core modules _T("our ($_script_reload, $_script_path, $_script_package);\n") // Internal vars _T("our ($script_name, $script_description, $script_author, $script_version);\n") // Package info _T("open SCRIPT, $_script_path;\n") // Open the script file _T("local @_source =