Aegisub/aegisub/src/auto4_lua_scriptreader.cpp

55 lines
1.6 KiB
C++
Raw Normal View History

2013-04-13 17:12:16 +02:00
// Copyright (c) 2013, Thomas Goyne <plorkyeran@aegisub.org>
//
// Permission to use, copy, modify, and distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
/// @file auto4_lua_scriptreader.cpp
/// @brief Script-file reader for Lua 5.1-based scripting engine
/// @ingroup scripting
///
#include "config.h"
#include "auto4_lua_scriptreader.h"
#include <libaegisub/io.h>
#include <fstream>
namespace Automation4 {
LuaScriptReader::LuaScriptReader(agi::fs::path const& filename)
2013-04-13 17:12:16 +02:00
: file(agi::io::Open(filename))
, first(true)
{
}
LuaScriptReader::~LuaScriptReader() { }
const char *LuaScriptReader::Read(size_t *bytes_read) {
2013-04-13 17:12:16 +02:00
file->read(buf, sizeof(buf));
*bytes_read = file->gcount();
if (first) {
first = false;
// Skip the bom
if (*bytes_read >= 3 && buf[0] == -17 && buf[1] == -69 && buf[2] == -65) {
*bytes_read -= 3;
return buf + 3;
}
}
return buf;
}
const char* LuaScriptReader::reader_func(lua_State *, void *data, size_t *size) {
return static_cast<LuaScriptReader*>(data)->Read(size);
}
}