Example #1
0
    def RegCmd(self, arg_strCmd, arg_strHelpInfo, arg_fCmdProc):
        oNodeArray = []
        oKeywordArray = arg_strCmd.split(' ')

        #準備待註冊命令的節點串
        for strKeyword in oKeywordArray:
            #新建一個節點
            #strKeyword裡可能帶有$、[]等等特殊標識,由Node處理
            if 0 < VOS.Len(strKeyword):
                oNode = CNode.CMD_Node(arg_strKeyword=strKeyword)
                oNodeArray.append(oNode)

        #串接起來
        self.MakeCmdNodesLink(oNodeArray)

        def AppendCmdProc(arg_oNodeArray=None, arg_fCmdProc=None):
            if (None == arg_oNodeArray) or (None == arg_fCmdProc):
                return

            def GetLastRequiredNode(arg_oNodeArray=None):
                for oNode in reversed(arg_oNodeArray):
                    if True == oNode.IsRequired():
                        return oNode
                return

            #獲取最後一個必填節點
            oNode = GetLastRequiredNode(arg_oNodeArray)
            if None != oNode:
                oNode.m_fCmdProc = arg_fCmdProc
            return

        #加上回調函式
        AppendCmdProc(oNodeArray, arg_fCmdProc)

        self.Insert(oNodeArray)
        return