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

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

SourceForge_text = [[
SourceForge上源代码的批注
===
极客讨论器内置了subversion版本控制界面，可以从SourceForge上下载代码然后在本地批注。

请选择**第三方开源项目**……

[关闭向导](cancel_auto_load)
]]

AboutConfig_text = [[
配置界面
===
仅有一处必须配置，其它保持缺省即可。请在左边的配置类别中选择**源代码**。
]]

Subversion_text = [[
源代码配置
===
SourceForge上常见的版本控制有cvs，subversion，git，hg等。如果是要下载的代码使用的是subversion版本库，请在“版本库URL”中输入URL；如果是git版本库，请切换到git标签页；如果是cvs/hg或其它版本库，目前还不支持。
]]

SubversionURL_text = [[
源代码配置
===
一个典型的SourceForge项目提供的subversion访问如下：  
![svn checkout svn://svn.code.sf.net/p/html/code-0/ html-code-0](sourceforge_svn_repository.png)  
将红色标识部分（svn://svn.code.sf.net/p/html/code-0/）填入版本库URL中；  
将蓝色标识部分（html-code-0）填入用户名中。  
因为SourceForge项目的只读访问不需要密码，所以密码保持为空即可。

[下一步](check_svn)
]]

Git_text = [[
源代码配置
===
SourceForge上常见的版本控制有cvs，subversion，git，hg等。如果是要下载的代码使用的是subversion版本库，请切换到subversion标签页；如果是git版本库，请开启“使用git版本库”；如果是cvs/hg或其它版本库，目前还不支持。
]]

SubversionURL_Error_text = [[
源代码配置
===
您输入的不是正确的SourceForge版本库地址或用户名，请检查后重新输入。

[下一步](check_svn)
]]

GitURL_text = [[
源代码配置
===
一个典型的SourceForge项目提供的git访问如下：  
![git clone git://git.code.sf.net/p/html/code-2 html-code-2](sourceforge_git_repository.png)  
将红色标识部分（git://git.code.sf.net/p/html/code-2）填入版本库URL中；  
将蓝色标识部分（html-code-2）填入用户名中。  
因为SourceForge项目的只读访问不需要密码，所以密码保持为空即可。

[下一步](check_git)
]]

GitURL_Error_text = [[
源代码配置
===
您输入的不是正确的SourceForge版本库地址或用户名，请检查后重新输入。

[下一步](check_git)
]]

Apply_text = [[
配置完成
===
点击**确定**即可开始使用。  
也可以先将配置保存为一个配置文件，这样，它将出现在首页的**最近使用的配置**列表中。

因为您没有配置**本地**信息，下载的代码和导入的本地subversion版本库都将放在缺省目录下。  
极客讨论器会为SourceForge项目创建缺省目录，您可以在关闭向导后选择**本地**配置类别指定目录。  
*如您不确定是否有必要将项目下载到本地以及导入本地subversion版本库，也可以先关闭“使用工作区”选项或者关闭“使用映射库”选项，先远程浏览项目，并随时可以重新配置，开启这些选项。*

[关闭向导](cancel_auto_load)
]]

-- 下面为聚光灯流程控制，请不要修改！
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 DumpAll(ControlTable)
	local Dump_text = "";

	for i = 1, #ControlTable do
		if type(ControlTable[i]) == "string" then
			Dump_text = Dump_text .. ControlTable[i] .. "  \n";
		elseif type(ControlTable[i]) == "table" then
			Dump_text = Dump_text .. ControlTable[i][1] .. "    " .. ControlTable[i][2] .. "  \n";
		end
	end
	return {}, Dump_text;
end

function ChangeSpotlights_check_git(Iter, ControlTable)
	local Control, Value = Iter();

	for Control, Value in Iter do
		if Control == "git_url" then
			if not string.match(Value, "[git|http]://git.code.sf.net/p/.+") then
				return { {"git_url", 2}, {"git_username", 2} }, GitURL_Error_text;
			end
		elseif Control == "git_username" then
			if string.len(Value) <= 0 then
				return { {"git_url", 2}, {"git_username", 2} }, GitURL_Error_text;
			end
		end
	end
	return ChangeSpotlights_apply(Iter, ControlTable);
end

function ChangeSpotlights_check_svn(Iter, ControlTable)
	local Control, Value = Iter();

	for Control, Value in Iter do
		if Control == "subversion_url" then
			if not string.match(Value, "[svn|http]://svn.code.sf.net/p/.+") then
				return { {"subversion_url", 2}, {"subversion_username", 2} }, SubversionURL_Error_text;
			end
		elseif Control == "subversion_username" then
			if string.len(Value) <= 0 then
				return { {"subversion_url", 2}, {"subversion_username", 2} }, SubversionURL_Error_text;
			end
		end
	end
	return ChangeSpotlights_apply(Iter, ControlTable);
end

function ChangeSpotlights_apply(Iter, ControlTable)
	return { {"save_as", 0}, {"apply", 0} }, Apply_text;
end

function ChangeSpotlights_about_config(Iter, ControlTable)
	return { {"config_tab", 1}, {"subversion_page", 0}, {"subversion_url", 0}, {"subversion_username", 0} }, Subversion_text;
end

function ChangeSpotlights_config(Iter, ControlTable)
	local Control, Value = Iter();

	if Control == "category_tree" and string.sub(Value, 1, 5) == "about" then
		return ChangeSpotlights_about_config(Iter, ControlTable);
	end
	return { {"category_tree", 1}, {"config_tab", 0} }, AboutConfig_text;
end

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

	if Control == "index" then
		return { {"new_config", 0}, {"open_source", 1} }, SourceForge_text;
	elseif Control == "config" then
		return ChangeSpotlights_config(Iter, ControlTable);
	elseif Control == "check_git" then
		return ChangeSpotlights_check_git(Iter, ControlTable);
	elseif Control == "check_svn" then
		return ChangeSpotlights_check_svn(Iter, ControlTable);
	elseif Control == "config_tab" and string.sub(Value, 1, 3) == "git" then
		return { {"config_tab", 1}, {"git_page", 0}, {"git_using", 1} }, Git_text;
	elseif Control == "config_tab" and string.sub(Value, 1, 10) == "subversion" then
		return ChangeSpotlights_about_config(Iter, ControlTable);
	elseif Control == "subversion_url" or Control == "subversion_username" then
		return { {"subversion_url", 2}, {"subversion_username", 2} }, SubversionURL_text;
	elseif Control == "git_using" and Value == "true" then
		return { {"git_url", 2}, {"git_username", 2} }, GitURL_text;
	elseif Control == "close" or Control == "cancel_auto_load" then
		return {}, "";
	elseif Control == "dump_all" then
		return DumpAll(ControlTable);
	end
end

AutoLoad = 0