-- 这是聚光灯控制脚本，用lua 5.2.x语言编写。聚光灯介绍形式是枫传网络独创的软件介绍方式。通过将软件界面雾化为背景，并用聚光灯突显要介绍的部分，配合文字说明，对软件进行介绍。您可以按照提示修改此脚本。
-- 下面为文件信息，除CodePage外，其它项目请不要修改。
Application = "GTalkabout"
Version = "1.1"
ScriptType = "tutorial"
CodePage = 936	-- 简体中文，如果您将此脚本翻译为其他语种，请修改为该语种对应的代码页，否则，请不要修改。
Example = "find_in_repos"

-- 下面为介绍文字，是markdown格式文本。您可以将其翻译为其它语种或进行修改，请不要修改圆括号内的文字。

SearchText_text = [[
1.1.6版新功能
===
极客讨论器的字符串搜索可以深入到subversion/git版本库中，并能搜索字符串的修改记录。  
另外也可以在本地工作区中搜索，以及基于工作拷贝的搜索。前者类似于本地目录搜索，不同的是仅限于工作区目录；后者是在工作区目录和工作拷贝，也就是版本控制的管理目录，例如subversion的.svn目录中搜索，并显示字符串的修改状态。

我们提供了一个向导为您介绍项目中搜索的使用方法。请[点击开始](start)

[关闭向导](cancel_auto_load)
]]

RecentConfig_text = [[
选择演示例子
===
请选择下面的 find\_in\_repos.xml 配置，配置里指定了一个演示用的版本库。  
[上一步](index)
]]

GTalkabout_Ungray_text = [[
项目中搜索
===
这是一个虚拟的工资表版本库，每一个修订版本是一个月的工资表。请选择“项目中搜索”标签页
]]

FindDennisInProject_text = [[
项目中搜索
===
先搜索一个简单的，请在搜索框中输入<font color=#f00>Dennis</font>后回车……
]]

FoundDennisInProject_text = [[
项目中搜索
===
搜索结果中“文件路径”中[Repository:2]表明字符串Dennis出现在修订版本2，之后**虽然Dennis出现在每个修订版本中，但因为没有修改，所以并不会列出**。  
[下一步](james)
]]

FindJamesInProject_text = [[
项目中搜索
===
James是离职的员工，现在我们想搜索他在哪期不再出现在工资表中，请在搜索框中输入<font color=#f00>James</font>后回车……
]]

FoundJamesInProject_text = [[
项目中搜索
===
两条结果，第一条在修订版本2，和Dennis一样，出现在修订版本2，第二条在修订版本7，这条记录有删除线，表明James在此时被删除，双击可看到已经变成Lerdorf了。  
[下一步](james2)
]]

FoundJames2InProject_text = [[
项目中搜索
===
此时如果结合“控制台”标签页（Control Panel）上的红旗按钮，可以看到James确实在修订版本7中被删除。  
[下一步](lerdorf)
]]

FindLerdorfInProject_text = [[
项目中搜索
===
修订版本2中并没有Lerdorf，现在我们想知道Lerdorf是在哪期加入工资表。请在搜索框中输入<font color=#f00>Lerdorf</font>后回车……
]]

FoundLerdorfInProject_text = [[
项目中搜索
===
搜索结果中“文件路径”中[Repository:5]表明字符串Lerdorf出现在修订版本5，红色表示是新增记录。  
[下一步](working_days)
]]

FindWorkingDaysInProject_text = [[
项目中搜索
===
最后看一个综合例子，现在想查找哪些人曾经一个月工作过22天，请在搜索框中输入<font color=#f00>22</font>后回车……
]]

FoundWorkingDaysInProject_text = [[
项目中搜索
===
搜索结果中，红色是新增记录，带删除线是删除记录。可以双击每条记录在版本库中查看，结合“控制台”标签页（Control Panel）上的红旗按钮，可以查看改动。  
[下一步](thank_you)
]]

ThankYou_text = [[
项目中搜索
===
这里介绍了版本库中搜索，用了一个简单的工资表版本库做演示，而在实际应用中，有大量修订版本，大量源代码文件的开发版本库中一样有很高的搜索效率。  
而为了保证搜索效率，必须配置映射库，将远程的版本库映射到本地，或者使用本地版本库，这样搜索会在本地的映射库中进行，而无需通过网络。  
![配置映射库](mirror_config.png)

[关闭向导](cancel_auto_load)
]]

SearchText_TabPage_controls = { {"resedit_panel", 1}, {"control_tab", 1} }

-- 下面为聚光灯流程控制，请不要修改！
function ControlValueIterator(ControlTable)
	local iIndex = 0

	return function()
		iIndex = iIndex + 1;
		local ControlValue = ControlTable[iIndex];

		if type(ControlValue) == "string" then
			return ControlValue, "";
		elseif type(ControlValue) == "table" then
			local Control, Value = ControlValue[1], ControlValue[2];

			if type(Control) == "string" then
				if type(Value) == "string" then
					return Control, Value;
				else
					return Control, "";
				end
			else
				return nil;
			end
		else
			return nil;
		end
	end
end

function CopyIterator(Iter, ControlTable)
	local Iter2 = Iter;
	local Iter2_upvalue = 1;

	function Iter2()
		local _, Origin = debug.getupvalue(Iter, 1);
		debug.setupvalue(Iter, 1, Iter2_upvalue);
		local Result = Iter()
		_, Iter2_upvalue = debug.getupvalue(Iter, 1);
		debug.setupvalue(Iter, 1, Origin);
		return Result;
	end
	return Iter2;
end

function ChangeSpotlights_recent_config(Iter, ControlTable)
	return { {"recent_config", 1} }, RecentConfig_text;
end

function ChangeSpotlights_gtalkabout_ungray(Iter, ControlTable)
	return SearchText_TabPage_controls, GTalkabout_Ungray_text;
end

function ChangeSpotlights_gtalkabout_thank_you(Iter, ControlTable)
	return { {"control_tab", 1} }, ThankYou_text;
end

Searched = nil;

function ChangeSpotlights(ControlTable)
	local Iter = ControlValueIterator(ControlTable);
	local Control, Value = Iter();

	if Control == "index" then
		return {}, SearchText_text;
	elseif Control == "start" or Control == "recent_config" then
		return ChangeSpotlights_recent_config(Iter, ControlTable);
	elseif (Control == "gray" and Value == "false") or (Control == "return") then
		return ChangeSpotlights_gtalkabout_ungray(Iter, ControlTable);
	elseif Control == "control_tab" and string.sub(Value, 1, 15) == "find_in_project" and (Searched == nil) then
		return SearchText_TabPage_controls, FindDennisInProject_text;
	elseif Control == "james" then
		return SearchText_TabPage_controls, FindJamesInProject_text;
	elseif Control == "james2" then
		return SearchText_TabPage_controls, FoundJames2InProject_text;
	elseif Control == "lerdorf" then
		return SearchText_TabPage_controls, FindLerdorfInProject_text;
	elseif Control == "working_days" then
		return SearchText_TabPage_controls, FindWorkingDaysInProject_text;
	elseif Control == "search_text_find" and Value ~= "" then
		Searched = Value;
	elseif Control == "search_text_find" and Searched == "Dennis" then
		return SearchText_TabPage_controls, FoundDennisInProject_text;
	elseif Control == "search_text_find" and Searched == "James" then
		return SearchText_TabPage_controls, FoundJamesInProject_text;
	elseif Control == "search_text_find" and Searched == "Lerdorf" then
		return SearchText_TabPage_controls, FoundLerdorfInProject_text;
	elseif Control == "search_text_find" and Searched == "22" then
		return SearchText_TabPage_controls, FoundWorkingDaysInProject_text;
	elseif Control == "thank_you" then
		return ChangeSpotlights_gtalkabout_thank_you(Iter, ControlTable);
	elseif Control == "close" or Control == "cancel_auto_load" then
		return {}, "";
	end
end

AutoLoad = 0