Example #1
0
BOOL TextTransform_Interactive(CString & text, LPCWSTR TransformationEvent, int iFncChosen)
{
	if (iFncChosen < 0)
		return FALSE;

	// get an array with the available scripts
	PluginArray * piScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(TransformationEvent);

	int iScript;
	for (iScript = 0 ; iScript < piScriptArray->GetSize() ; iScript++)
	{
		if (iFncChosen < piScriptArray->GetAt(iScript).m_nFreeFunctions)
			// we have found the script file
			break;
		iFncChosen -= piScriptArray->GetAt(iScript).m_nFreeFunctions;
	}

	if (iScript >= piScriptArray->GetSize())
		return FALSE;

	// iFncChosen is the index of the function in the script file
	// we must convert it to the function ID
	int fncID = GetMethodIDInScript(piScriptArray->GetAt(iScript).m_lpDispatch, iFncChosen);

	// execute the transform operation
	BOOL bChanged = FALSE;
	InvokeTransformText(text, bChanged, piScriptArray->GetAt(iScript).m_lpDispatch, fncID);

	return bChanged;
}
Example #2
0
void GetFreeFunctionsInScripts(CStringArray & sNamesArray, LPCWSTR TransformationEvent)
{
	// get an array with the available scripts
	PluginArray * piScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(TransformationEvent);

	// fill in these structures
	int nFnc = 0;	
	int iScript;
	for (iScript = 0 ; iScript < piScriptArray->GetSize() ; iScript++)
	{
		PluginInfo & plugin = piScriptArray->ElementAt(iScript);
		LPDISPATCH piScript = plugin.m_lpDispatch;
		BSTR * scriptNamesArray;
		int * scriptIdsArray;
		int nScriptFnc = GetMethodsFromScript(piScript, scriptNamesArray, scriptIdsArray);
		sNamesArray.SetSize(nFnc+nScriptFnc);

		int iFnc;
		for (iFnc = 0 ; iFnc < nScriptFnc ; iFnc++)
			// the CString = operator provides the conversion if UNICODE is not defined
			sNamesArray[nFnc+iFnc] = scriptNamesArray[iFnc];

		delete [] scriptIdsArray;
		delete [] scriptNamesArray;

		nFnc += nScriptFnc;
	}
}
Example #3
0
void CSelectUnpackerDlg::Initialize()
{
	//{{AFX_DATA_INIT(CSelectUnpackerDlg)
	m_bNoExtensionCheck = FALSE;
	m_strDescription = _T("");
	m_strExtensions = _T("");
	//}}AFX_DATA_INIT

	// texts for the default unpackers
	noPlugin = new PluginInfo;
	noPlugin->m_lpDispatch = NULL;
	noPlugin->m_filters = NULL;
	noPlugin->m_name = theApp.LoadString(IDS_USERCHOICE_NONE);
	automaticPlugin = new PluginInfo;
	automaticPlugin->m_lpDispatch = NULL;
	automaticPlugin->m_filters = NULL;
	automaticPlugin->m_name = LoadResString(IDS_USERCHOICE_AUTOMATIC);
	automaticPlugin->m_description = LoadResString(ID_UNPACK_AUTO);

	m_pPlugin = noPlugin;

	PluginArray * piFileScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(L"FILE_PACK_UNPACK");
	PluginArray * piBufferScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(L"BUFFER_PACK_UNPACK");

	// add the default unpackers to the unpackers list
	m_UnpackerPlugins.Add(noPlugin);
	m_bWithFileFlags.Add(0);
	m_UnpackerPlugins.Add(automaticPlugin);
	m_bWithFileFlags.Add(0);
	// add the real unpackers to the unpackers list
	int i;
	for (i = 0 ; i < piFileScriptArray->GetSize() ; i++)
	{
		// during the dialog, we use a pointer to the scriptsOfThreads array
		m_UnpackerPlugins.Add(&piFileScriptArray->ElementAt(i));
		m_bWithFileFlags.Add(1);
	}
	for (i = 0 ; i < piBufferScriptArray->GetSize() ; i++)
	{
		// during the dialog, we use a pointer to the scriptsOfThreads array
		m_UnpackerPlugins.Add(&piBufferScriptArray->ElementAt(i));
		m_bWithFileFlags.Add(0);
	}
}
Example #4
0
/**
 * @brief Add plugins of given event type to the list.
 * @param [in] pluginEvent Event type for plugins to add.
 * @param [in] pluginType String to use as type in the list.
 */
void PluginsListDlg::AddPluginsToList(LPCWSTR pluginEvent, LPCTSTR pluginType)
{
	PluginArray * piPluginArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(pluginEvent);

	for (int iPlugin = 0 ; iPlugin < piPluginArray->GetSize() ; iPlugin++)
	{
		PluginInfo & plugin = piPluginArray->ElementAt(iPlugin);
		int ind = m_list.InsertItem(m_list.GetItemCount(), plugin.m_name.c_str());
		m_list.SetItemText(ind, 1, pluginType);
		m_list.SetItemText(ind, 2, plugin.m_description.c_str());
	}
}
Example #5
0
/** 
 * @brief Write plugin names
 */
void CConfigLog::WritePluginsInLogFile(LPCWSTR transformationEvent)
{
	// do nothing if actually reading config file
	if (!m_writing)
		return;

	// get an array with the available scripts
	PluginArray * piPluginArray; 

	piPluginArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(transformationEvent);

	int iPlugin;
	for (iPlugin = 0 ; iPlugin < piPluginArray->GetSize() ; iPlugin++)
	{
		PluginInfo & plugin = piPluginArray->ElementAt(iPlugin);
		m_pfile->WriteString(_T("\r\n  "));
		m_pfile->WriteString(plugin.m_name.c_str());
		m_pfile->WriteString(_T(" ["));
		m_pfile->WriteString(plugin.m_filepath.c_str());
		m_pfile->WriteString(_T("]"));
	}
}
Example #6
0
// scan plugins for the first handler
BOOL FileTransform_Prediffing(String & filepath, LPCTSTR filteredText, PrediffingInfo * handler, BOOL bMayOverwrite)
{
	storageForPlugins bufferData;
	// detect Ansi or Unicode file
	bufferData.SetDataFileUnknown(filepath.c_str(), bMayOverwrite);
	// TODO : set the codepage
	// bufferData.SetCodepage();

	// filename, to test the extension
	CString filename = PathFindFileName(filepath.c_str());

	// control value
	BOOL bHandled = FALSE;

	// get the scriptlet files
	PluginArray * piFileScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(L"FILE_PREDIFF");

	// MAIN LOOP : call each handler, 
	// stop as soon as we have a success
	int step;
	for (step = 0 ; bHandled == FALSE && step < piFileScriptArray->GetSize() ; step ++)
	{
		PluginInfo & plugin = piFileScriptArray->ElementAt(step);
		if (plugin.m_bAutomatic == FALSE)
			continue;
		if (plugin.TestAgainstRegList(filteredText) == FALSE)
			continue;

		handler->pluginName = plugin.m_name;
		handler->bWithFile = TRUE;
		// use a temporary dest name
		bHandled = InvokePrediffFile(bufferData.GetDataFileAnsi(),
			bufferData.GetDestFileName(),
			bufferData.GetNChanged(),
			plugin.m_lpDispatch);
		if (bHandled)
			bufferData.ValidateNewFile();
	}

	// get the scriptlet files
	PluginArray * piBufferScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(L"BUFFER_PREDIFF");

	// MAIN LOOP : call each handler, 
	// stop as soon as we have a success
	for (step = 0 ; bHandled == FALSE && step < piBufferScriptArray->GetSize() ; step ++)
	{
		PluginInfo & plugin = piBufferScriptArray->ElementAt(step);
		if (plugin.m_bAutomatic == FALSE)
			continue;
		if (plugin.TestAgainstRegList(filteredText) == FALSE)
			continue;

		handler->pluginName = plugin.m_name;
		handler->bWithFile = FALSE;
		// probably it is for VB/VBscript so use a BSTR as argument
		bHandled = InvokePrediffBuffer(*bufferData.GetDataBufferUnicode(),
			bufferData.GetNChanged(),
			plugin.m_lpDispatch);
		if (bHandled)
			bufferData.ValidateNewBuffer();
	}

	if (bHandled == FALSE)
	{
		// we didn't find any prediffer, that is OK anyway
		handler->pluginName = _T("");
		bHandled = TRUE;
	}

	// the handler is now defined
	handler->bToBeScanned = FALSE;

	// if the buffer changed, write it before leaving
	BOOL bSuccess = TRUE;
	if (bufferData.GetNChangedValid() > 0)
	{
		bSuccess = bufferData.SaveAsFile(filepath);
	}

	return bSuccess;
}
Example #7
0
// scan plugins for the first handler
BOOL FileTransform_Unpacking(String & filepath, LPCTSTR filteredText, PackingInfo * handler, int * handlerSubcode)
{
	// PLUGIN_BUILTIN_XML : read source file through custom UniFile
	if (handler->bToBeScanned == PLUGIN_BUILTIN_XML)
	{
		handler->pufile = new UniMarkdownFile;
		handler->textType = _T("xml");
		handler->disallowMixedEOL = true;
		handler->pluginName.erase(); // Make FileTransform_Packing() a NOP
		// Leave bToBeScanned alone so above lines will continue to execute on
		// subsequent calls to this function
		return TRUE;
	}

	storageForPlugins bufferData;
	bufferData.SetDataFileAnsi(filepath.c_str());

	// filename, to test the extension
	CString filename = PathFindFileName(filepath.c_str());

	// control value
	BOOL bHandled = FALSE;

	// get the scriptlet files
	PluginArray * piFileScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(L"FILE_PACK_UNPACK");

	// MAIN LOOP : call each handler, 
	// stop as soon as we have a success
	int step;
	for (step = 0 ; bHandled == FALSE && step < piFileScriptArray->GetSize() ; step ++)
	{
		PluginInfo & plugin = piFileScriptArray->ElementAt(step);
		if (plugin.m_bAutomatic == FALSE)
			continue;
		if (plugin.TestAgainstRegList(filteredText) == FALSE)
			continue;

		handler->pluginName = plugin.m_name;
		handler->bWithFile = TRUE;
		// use a temporary dest name
		bHandled = InvokeUnpackFile(bufferData.GetDataFileAnsi(),
			bufferData.GetDestFileName(),
			bufferData.GetNChanged(),
			plugin.m_lpDispatch, handler->subcode);
		if (bHandled)
			bufferData.ValidateNewFile();
	}

	// We can not assume that the file is text, so use a safearray and not a BSTR
	// TODO : delete this event ? 	Is anyone going to use this ?

	// get the scriptlet files
	PluginArray * piBufferScriptArray = 
		CAllThreadsScripts::GetActiveSet()->GetAvailableScripts(L"BUFFER_PACK_UNPACK");

	// MAIN LOOP : call each handler, 
	// stop as soon as we have a success
	for (step = 0 ; bHandled == FALSE && step < piBufferScriptArray->GetSize() ; step ++)
	{
		PluginInfo & plugin = piBufferScriptArray->ElementAt(step);
		if (plugin.m_bAutomatic == FALSE)
			continue;
		if (plugin.TestAgainstRegList(filteredText) == FALSE)
			continue;

		handler->pluginName = plugin.m_name;
		handler->bWithFile = FALSE;
		bHandled = InvokeUnpackBuffer(*bufferData.GetDataBufferAnsi(),
			bufferData.GetNChanged(),
			plugin.m_lpDispatch, handler->subcode);
		if (bHandled)
			bufferData.ValidateNewBuffer();
	}

	if (bHandled == FALSE)
	{
		// we didn't find any unpacker, just hope it is normal Ansi/Unicode
		handler->pluginName = _T("");
		handler->subcode = 0;
		bHandled = TRUE;
	}

	// the handler is now defined
	handler->bToBeScanned = FALSE;

	// assign the sucode
	*handlerSubcode = handler->subcode;

	// if the buffer changed, write it before leaving
	BOOL bSuccess = TRUE;
	if (bufferData.GetNChangedValid() > 0)
	{
		bSuccess = bufferData.SaveAsFile(filepath);
	}

	return bSuccess;
}