OpenDoc Framework Resource Compiler即ODFRC,再百度上很难找到其相关的资料,但是他确实InDesign插件开发中非常重要的内容,其中fr文件就是遵照的ODFRC的标准。
插件在fr文件中定义插件需要使用的特定资源,一个fr文件可以包含所有的资源,也可以包含其他fr文件。
fr文件包含:
1.#include语句,包含为资源提供IDs的文件,和额外的资源定义和声明文件。
2.资源定义,可以声明新的资源类型
3.资源声明
在fr文件中声明插件的版本类似这样:
resource PluginVersion (kSDKDefPluginVersionResourceID)
{
kTargetVersion, //1
kFrmLblPluginID, //2
kSDKDefPluginMajorVersionNumber, kSDKDefPluginMinorVersionNumber, //3
kSDKDefHostMajorVersionNumber, kSDKDefHostMinorVersionNumber, //4
kFrmLblLastMajorVersionNumber, kFrmLblLastMinorVersionNumber, //5
{ kInDesignProduct, kInCopyProduct, kInDesignServerProduct }, //6
{ kWildFS }, //7
kModelPlugin, //8
kFrmLblVersion //9
};
1.插件编译的目标类型
2.插件唯一ID
3.插件主版本和次版本号
4.插件支持的程序的主版本和次版本号
5.兼容版本
6.插件的目标程序类型
7.特性集支持情况
8.插件支持插件类型的情况
9.四个组成部分的版本字符串,如7.0.0.0
插件的依赖,如一个用户界面的插件需要依赖一个现存的模型插件。
resrouce PluginDependency(1)
{
kWildFS,
{
kWatermarkPluginID, kWatermarkPluginName,
kMajorVersionNumber, kMinorVersionNumber,
}
};
额外的插件信息
插件可以为文档提供额外的数据。这就避免了不是预料之中的文档打开。当插件缺失时,会显示一些错误信息。
resource ExtraPluginInfo(1)
{
"Facemap", //公司名字
“http://www.facemap.com.cn”, //URL
"你可以从这里下载到这个插件。。。", //插件缺失时的提示信息
};
语法列表
插件可以往文档数据库中写入和重新获取实现的数据。这样的插件必须要能写入和读取它的数据。一些时候,数据进行了变更,但是为了支持较早以前的版本,语法转换是一个在资源等级上处理数据转换的方便的方式。典型的如下:
resource SchemaList(1)
{{
Schema
{
kMyDataImpl,
{kRocketMajorFormat, kMyDataChangeChg},
{
{Int32{1,kMyDataDefaultIndex}},
{Int32{2,kMyDataDefaultSize}},
}
}
};
类描述表
resource ClassDescriptionTable(1)
{{{
AddIn
{
kWorkspaceBoss,
kInvalidClass,
{
IID_IMYDATA, kMyDataImpl,
}
},
Class
{
kMyDataBoss,
kSomeBaseClassDataBoss, //Base Class
{
IID_IMYDATA, kMyDataImpl,
}
},
}}};
工场列表
插件必须注册每个实现。工厂列表资源典型的就是包括在其他头文件中定义的实现注册。
resource FactoryList(1)
{
kImplementationIDSpace,
{
#include "FrmLblUIFactoryList.h"
}
};
效果上等同于:
resource FactoryList(1)
{
kImplementationIDSpace,
{
REGISTER_PMINTERFACE(FrmLblUIActionComponent, kFrmLblUIActionComponentImpl)
REGISTER_PMINTERFACE(FrmLblUIDialogController, kFrmLblUIDialogControllerImpl)
}
};
本地化索引
插件可以全面本地化,包括本地化字符串和用户界面布局。下面描述了插件可以提供本地化字符串给日本特性集,本地化运行在日本环境下,但是在其他地方使用英文。
resource LocalIndex(kSDKDefStringsResourceID)
{
kStringTableRsrcType,
{
kWildFS, k_enUS, kSDKDefStringsResourceID + index_enUS
kInDesignJapaneseFS, k_jaJP, kSDKDefStringsResourceID + index_jaJP
kWildFS, k_wild, kSDKDefStringsResourceID + index_enUS
}
};
字符表格
用来提供本地化的字符翻译:
resource StringTable(kSDKDefStringsResourceID + index_enUS)
{
k_enUS, //Local Id
kEuropeanWinToMacEncodingConverter, //字符编码转换
{
//菜单字符串
"MyDataOnMenuItem", "My Data On",
...
}
};
用户错误表
一些InDesign API在错误时返回一个错误码。错误码可以映射为更友好的字符串如:
resource UserErrorTable(kSDKDefErrorStringsResourceID)
{
{
kMySetDataFailureErrorCode, "Failed to Set Data",
}
};
还有一些资源,如菜单定义,动作定义,定义对话框和面板的控件。
InDesign支持多线程访问资源。当插件编译后,OFDFRC生成了多个文件夹来包含资源文件。如果资源文件丢失,插件将不能加载。