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

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

OrcaCloud_text = [[
1.1.9/1.2.0版新功能 -- ORCA知识云
===
ORCA知识云是您用极客讨论器阅读源代码时，自动连接的<font color=#f00>免费在线帮助云服务器</font>，给代码中诸如函数，参数，函数调用，甚至代码段逻辑提供解释，辅助您阅读。

下面是一个例子：您需要参考写Leap\_Motion驱动，在GitHub上找到了一个使用Leap\_Motion原始视频数据的项目，此代码中用到了OpenCV。OpenCV的API在ORCA知识云中已登记，当用极客讨论器打开此项目后，它会先帮您找到OpenCV有关的代码，用不同背景色突显出来。  
选择其中任一个函数，就可从知识云接收它的帮助。  
![ORCA知识云](orca_cloud.png)

*因为要和我们的在线服务器交换数据，此功能仅当阅读开源代码才默认开启。*  

我们提供了一个向导为您介绍ORCA知识云的使用方法。请[点击开始](start)

[关闭向导](cancel_auto_load)
]]

RecentConfig_text = [[
选择演示例子
===
请选择下面的配置文件，配置里指定了一个演示用的项目。*例子源代码来自互联网，版权归原作者*  
[上一步](index)
]]

GTalkabout_Gray_text = [[
下载代码
===
正在从互联网下载代码，请稍候……
]]

GTalkabout_Ungray_text = [[
项目中的代码
===
代码已经下载到本地工作区目录下。[点击](acquainting)查看ORCA知识云的面板……
]]

Acquainting_text = [[
相识中面板
===
ORCA知识云的面版名为<font color=#f00>相识中</font>，即是您和陌生源代码的相识，也可以是您认识其他读者的桥梁。请打开工作区中一个文件，点击带背景色的代码……  [找不到？](not_found)
]]

NotFound_text = [[
相识中面板
===
请确保orca.gtalkabout.cn可以ping通，然后打开main.c，找到里面的cv开头的函数……
]]

AcquaintCode_text = [[
相识中面板
===
请选中带背景色的代码……
]]

AcquaintReceive_text = [[
接收知识
===
接收按钮可以接收你选中代码的有关知识，请点击它……
]]

Received_text = [[
接收知识
===
可以看到已接收到函数相关的知识。  [下一步](thank_you)
]]

ThankYou_text = [[
关于ORCA知识云
===
ORCA知识云中的知识分为两大类，<font color=#f00>通用知识</font>和<font color=#f00>特定知识</font>。两者都在代码上突显为<font color=#f00>知识点</font>。  
举例来说，函数cvCanny的用途，参数，返回值等是通用知识，至于此项目中为什么要调用cvCanny，调用后对程序有什么影响是特定知识。  
通用知识的知识点能出现在更多地方，但是对于读者的帮助毕竟有限。在极客网站上和其他读者一起讨论能进行更深层次的理解，或者把自己理解的部分作为笔记记录在极客网站上，以备今后自己和他人使用。在极客网站上的消息和记录都会登记在ORCA知识云中（<font color=#f00>1.1.9版的消息登记服务器已并入到了ORCA知识云中</font>），成为特定知识。  
*知识点是极客讨论器核心数据——批注消息的特殊表现形式，具有批注消息的相同性质。*

**注意一**：因为ORCA知识云需要连接互联网上的云端服务器并进行数据交换，所以，团队开发项目（连接局域网）和本地开发项目（不连接网络）默认不开启此功能。  
**注意二**：ORCA知识云的知识是不断优化的，即有可能增加，也有可能因精简而删除，不保证每次收到相同的知识点和知识。

[关闭向导](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 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_thank_you(Iter, ControlTable)
	return {}, ThankYou_text;
end

Received = false;

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

	if Control == "index" then
		return {}, OrcaCloud_text;
	elseif Control == "start" or Control == "recent_config" then
		return ChangeSpotlights_recent_config(Iter, ControlTable);
	elseif Control == "gtalkabout" then
		return {}, GTalkabout_Gray_text;
	elseif (Control == "gray" and Value == "false") or (Control == "return") then
		return { {"resource_list", 1} }, GTalkabout_Ungray_text;
	elseif Control == "acquainting" then
		return { {"resource_list", 1}, {"im_tab", 0} }, Acquainting_text;
	elseif Control == "acquaint_receive" then
		if Value == "symbol" then
			Received = true;
			return { {"resource_list", 0}, {"im_tab", 0}, {"acquaint_receive", 1} }, AcquaintReceive_text;
		elseif Value == "repository" then
			return { {"resource_list", 1}, {"im_tab", 0} }, AcquaintCode_text;
		elseif Value == "receive" and Received then
			return { {"resource_list", 0}, {"im_tab", 0} }, Received_text;
		end
	elseif Control == "not_found" then
		return { {"resource_list", 1}, {"im_tab", 0} }, NotFound_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