UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

217 lines (167 loc) 7.31 kB
/** * Created by yjtx on 15-9-18. */ /** * Created by egret on 2014/12/10. */ import help_def_set = require("./helpConfig"); /// 参数说明中的文字说明与关键字之间的最小间隔 var GAP_WORD_AND_ITS_DESC = 3; var space = ' '; var newLine = '\n'; var indent = ' '; /// 常量集合类 分析器 键集类 class HelpDefParserKey { static COMMAND = "command"; static DESC = "desc"; static PARAMETERS = "parameters"; static PLACEHOLDER = "placeholder"; static OPTIONAL = "optional"; static CONFIGS = "configs"; static NAME = "name"; static PREFIX = "prefix"; static CONFIG_PARAS = "config-paras"; static TYPE = "type"; static ENUM_LIST = "enum-list"; } class CfgParaType { static STRING = "string"; static ENUM = "enum"; } class DetailBody { word; desc; constructor(word, desc) { this.word = word; this.desc = desc; } joinWithSpaceAlign(iGapSpace) { //console.log( "空格数:", iGapSpace, "<", getRepeatString( space, iGapSpace - this.word.length ), ">" ); return this.word + getRepeatString(space, iGapSpace - this.word.length) + this.desc; } } /// 获得 已考虑可选项标记的范式单词 Form Word Consider Optional function getFwco(sWord, bOptional) { return bOptional ? "[" + sWord + "]" : sWord; } function getRepeatString(sBase, nRepeat) { if (nRepeat <= 0) { throw new Error("play with me ?!"); } else { var sProd = sBase; for (var i = nRepeat; i > 1; --i) sProd = sBase + sProd; return sProd; } } namespace help { export function logHelpDef( command ) { var json = help_def_set[ command ]; if (!json){ return false; } /// 帮助信息分为三部分 用法 描述 和参数说明。先放在三个字符串元素中,最后再组合。 var sDesc; var sPrefix; var sPrefixCfgPara; var sName; var sPlaceHolder; var bOptional; var sFormBuffer = helpModule.help_dict.form + ":"; var sDescBuffer = helpModule.help_dict.desc +":"; var sDetailBuffer = helpModule.help_dict.detail +":"; /// 命令总体描述 最简单,先取出值。 之后专心分析 用法 和 参数说明 sDescBuffer += newLine + indent + json[HelpDefParserKey.DESC]; /// 命令范式元素暂存数组 var aFormCollection = ["egret"]; aFormCollection.push(json[HelpDefParserKey.COMMAND]); /// 配置说明半成品元素暂存数组 var aDetailBody = []; /// 参数的占位符 或 配置的关键字 最大长度线。 var iWordLenMax = 0; /// 对参数的逐一分析,分别 添加到 用法 和 参数说明部分 var aParameter = json[HelpDefParserKey.PARAMETERS]; for (var i = 0; i < aParameter.length; ++i) { var oParameter = aParameter[i]; sPlaceHolder = oParameter[HelpDefParserKey.PLACEHOLDER]; sDesc = oParameter[HelpDefParserKey.DESC]; bOptional = oParameter[HelpDefParserKey.OPTIONAL] == "true"; /// 命令范式拼接 aFormCollection.push(getFwco(sPlaceHolder, bOptional)); /// 参数说明拼接 并最高长度记录 iWordLenMax = Math.max(iWordLenMax, sPlaceHolder.length); aDetailBody.push(new DetailBody(sPlaceHolder, sDesc)); } /// 对配置的逐一分析,分别添加到 用法 和 参数说明部分 var aConfig = json[HelpDefParserKey.CONFIGS]; for (var i = 0; i < aConfig.length; ++i) { var oConfig = aConfig[i]; sName = oConfig[HelpDefParserKey.NAME]; sPrefix = oConfig[HelpDefParserKey.PREFIX]; sDesc = oConfig[HelpDefParserKey.DESC]; bOptional = oConfig[HelpDefParserKey.OPTIONAL] == "true"; /// 配置说明拼接 并最高长度记录 iWordLenMax = Math.max(iWordLenMax, (sPrefix + sName).length); aDetailBody.push(new DetailBody(sPrefix + sName, sDesc)); /// 配置参数的范式显示根据类型不一样,因此首先得到 未考虑可选项的范式单词 var fwcoSubLv1 = ""; var bOptSubLv1; var aCfgParas = oConfig[HelpDefParserKey.CONFIG_PARAS]; for (var j = 0; j < aCfgParas.length; ++j) { var oCfgPara = aCfgParas[j]; var sType = oCfgPara[HelpDefParserKey.TYPE]; bOptSubLv1 = oCfgPara[HelpDefParserKey.OPTIONAL] == "true"; switch (sType) { case CfgParaType.STRING: sPlaceHolder = oCfgPara[HelpDefParserKey.PLACEHOLDER]; /// 配置参数不一定需要描述,需要判断描述是否为空来进行处理 sDesc = oCfgPara[HelpDefParserKey.DESC]; /// 前缀是否存在往往与描述是否存在一致,即要么都没,要么都有 sPrefixCfgPara = oCfgPara[HelpDefParserKey.PREFIX]; //console.log( "sPrefix:", sPrefix ); if( sDesc ){ /// 配置说明拼接 并最高长度记录 iWordLenMax = Math.max(iWordLenMax, (sPrefixCfgPara + sPlaceHolder).length); aDetailBody.push(new DetailBody(sPrefixCfgPara + sPlaceHolder, sDesc)); } fwcoSubLv1 = getFwco( sPrefixCfgPara ? sPrefixCfgPara + sPlaceHolder : sPlaceHolder, bOptSubLv1 ); break; case CfgParaType.ENUM: var aEnumList = oCfgPara[HelpDefParserKey.ENUM_LIST]; fwcoSubLv1 = getFwco( aEnumList.join("|"), bOptSubLv1 ); break; } } aFormCollection.push( getFwco( sPrefix + sName + ( fwcoSubLv1.length ? space + fwcoSubLv1 : ''), bOptional ) ); } /// 配置说明元素暂存数组 var aDetailCollection = []; /// 对参数及配置的说明 进行word部分的最长对齐! for (var i = 0; i < aDetailBody.length; ++i) { var detailBody = aDetailBody[i]; aDetailCollection.push( detailBody.joinWithSpaceAlign(iWordLenMax + GAP_WORD_AND_ITS_DESC) ); } //// 用法 缓冲集合 sFormBuffer += newLine + indent + aFormCollection.join(space); //// 参数/配置说明 缓冲集合 if( aDetailCollection.length ){ sDetailBuffer += newLine + indent + aDetailCollection.join(newLine + indent); }else{ sDetailBuffer = ""; } var aConsoleOut; if( sDetailBuffer.length ){ aConsoleOut = [sFormBuffer, newLine, sDescBuffer, newLine, sDetailBuffer]; }else{ aConsoleOut = [sFormBuffer, newLine, sDescBuffer]; } console.log( aConsoleOut.join(newLine) ); console.log(""); //console.log( "(output from help def configuration!)" ); return true; } } export = help;