CodeGen编写自定义表达式标记

CodeGen支持开发人员通过编写plug-in modules插件模块来定义自定义表达式标记的能力,以提供与这些标记相关联的逻辑。这种plug-in modules插件机制的实现方式不需要开发人员编辑核心CodeGen源文件。这一点很重要,因为这意味着它不会妨碍将来将源代码更新下载到核心CodeGen环境的能力。

编写自定义表达式标记

类在程序集表达式中实现为自定义表达式。为了实现自定义表达式标记,开发人员创建一个包含一个或多个扩展类的类库程序集,并将该库与其他CodeGen程序集一起放入主CodeGen文件夹。

如果希望从其他位置加载自定义扩展,则可以将环境变量CODEGEN_EXTDIR设置为自定义令牌扩展程序集的位置。

当CodeGen加载时,它将检查是否有任何自定义标记程序集,如果找到任何自定义标记程序集,它将动态加载它们。为了实现这一点,使用了命名约定。任何自定义扩展程序集的名称必须以单词“custom”开头。例如,您可以选择创建一个名为自定义CustomTokens.dll。

实现自定义表达式标记的每个类,都必须实现接口CodeGen.Engine.IExpressionToken可以通过添加对代码CodeGenEngine.dll汇编库。

源代码示例

CodeGen源代码包包括一个名为CustomExtensionsExample的示例项目,其中包含实现所有类型的自定义表达式标记的示例。此项目被配置为在生成主解决方案时不生成,只是一个示例。鼓励开发人员在单独的解决方案中开发自定义表达式处理器。

下面的代码显示了自定义字段循环表达式标记的示例:

import System

import System.Collections.Generic

import CodeGen.Engine

import CodeGen.RepositoryAPI

namespace CustomExtensionsExample

;;To implement a
custom expression you must build a class that implements the

  ;;CodeGen.Engine.IExpressionToken interface. The class
MUST have a default constructor.

  ;;By default classes have an implicit default constructor,
but if you need to

  ;;explicitly define a constructor, make sure you don't
define any parameters.

  ;;

  ;;You can use this expression in field loops, like this:

  ;;

  ;;  <FIELD_LOOP>

  ;;  If you see YES then the
expression evaluated to true: <IF
CUSTOM_FIELD_LOOP_EXPRESSION>YES</IF>

  ;;  </FIELD_LOOP>

  ;;

public class CustomFieldLoopExpression implements IExpressionToken

public property TokenName,
String

      method get

      proc

        mreturn "CUSTOM_FIELD_LOOP_EXPRESSION"

      endmethod

    endproperty

public property Description,
String

      method get

      proc

        mreturn "An
example of a custom field loop expression."

      endmethod

    endproperty

public property Validity,
TokenValidity

      method get

      proc

        mreturn TokenValidity.FieldLoop

      endmethod

    endproperty

public method Evaluate,
Boolean

      tkn, @Token

      template, @FileNode 

      loops, @IEnumerable<LoopNode>

      endparams

    proc

lambda doEvaluate(str, field, index)

      begin

        ;TODO: Add
code here to determine the result of the expression, and return true or false

        mreturn true

      end

mreturn ExpressionEvaluator.EvaluateFieldLoopExpression(tkn,
template, loops, doEvaluate)

endmethod

endclass

endnamespace

CodeGen编写自定义表达式标记的更多相关文章

  1. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  2. 在 WF 4 中编写自定义控制流活动

    在 WF 4 中编写自定义控制流活动 Leon Welicki 控制流是指组织和执行程序中各个指令的方法. 在 Windows Workflow Foundation 4 (WF 4) 中,控制流活动 ...

  3. (译)Getting Started——1.3.4 Writing a Custom Class(编写自定义的类)

     在开发IOS应用中,当你编写自定义的类时,你会发现很多的特殊场合.当你需要把自定义的行为和数据包装在一起时,自定义的类非常有用.在自定义的类中,你可以定义自己的存储.处理和显示数据的方法. 例如,I ...

  4. 用mel编写自定义节点的属性编辑器界面

    用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...

  5. RobotFramework自动化测试框架-使用Python编写自定义的RobotFramework Lib

    使用Python构建Lib工程 可以用来开发Python Lib的IDE工具有很多,常见的有Pycharm,Eclipse with PyDev插件等,而且在RobotFramework官网中也已经提 ...

  6. SpringBoot编写自定义的starter 专题

    What’s in a name All official starters follow a similar naming pattern; spring-boot-starter-*, where ...

  7. SpringBoot编写自定义配置信息

    ⒈编写自定义配置类 1.浏览器配置 package cn.coreqi.security.properties; public class BrowserProperties { private St ...

  8. R语言-编写自定义函数 ZZ

    一.函数构造器 每一个R函数都包括三个部分:函数名,程序主体以及参数集合,在编写自定义R函数时,需要将三个部分各自储存在一个R对象中.这里需要使用function函数,形如: my_function& ...

  9. Django 编写自定义的 404 / 500 报错界面

    Django 编写自定义的 404 / 500 报错界面 1. 首先 setting.py 文件中的 debug 参数设置成 false ,不启用调试. DEBUG = False 2. 在 temp ...

随机推荐

  1. hdu1466 递推

    题意:       给你n条直线,不会存在三线共点,输出所有的可能交点数.. 思路:       这个是个地推的题目,假设当前的线段i,他里面有r条是随意的,有(i - r)条是平行的,那么当前的交点 ...

  2. LA3905流星

    题意:       在一个二维平面上有n个流星,每个流星有自己的初始位置和速度,有一个照相机,张相机的可视范围是一个矩形框,左下角(0,0)右上角(w ,h),然后问你相机的矩形内出现的最多的流星数是 ...

  3. Dalvik模式下基于Android运行时类加载的函数dexFindClass脱壳

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78003184 前段时间在看雪论坛发现了<发现一个安卓万能脱壳方法>这篇 ...

  4. hdu4370 比较抽象的最短路

    题意:       给你一个n*n的矩阵,然后让咱们构造另一个n*n的矩阵,构造的矩阵有如下要求, 1.X12+X13+...X1n=1. 2.X1n+X2n+...Xn-1n=1. 3.for ea ...

  5. hdu4966 最小树形图(最少辅导花费)

    题意:       以一些科目,和辅导班,每个科目最终要求修到某个等级,可以花一定的钱在辅导班把某一科目修到某一等级,进入辅导班的时候会有一个限制,那就是达到他给出的科目和等级限制,比如a b c d ...

  6. POJ2296二分2sat

    题意:       给n个点,每个点必须在一个正方形上,可以在正方向上面边的中点或者是下面边的中点,正方形是和x,y轴平行的,而且所有的点的正方形的边长一样,并且正方形不能相互重叠(边相邻可以),问满 ...

  7. POJ1456贪心(set或者并查集区间合并)

    题意:       给你n商品,每个商品有自己的价值还有保质期,一天最多只能卖出去一个商品,问最大收益是多少? 思路:       比较好想的贪心,思路是这样,每一次我们肯定拿价值最大的,至于在那天拿 ...

  8. CTFHub-技能树-SSRF

    SSRF 目录 SSRF 1.内网访问 2.伪协议读取文件 3.端口扫描 4.POST请求 5.上传文件 6.FastCGI协议 7.Redis 8.URL Bypass 9.数字IP Bypass ...

  9. VBA绘制Excel图表

    VBA调试运行进入: 几个例子: 删除工作表内所有图表 录制一个宏 简化宏再使用 大量图表可采用for循环 CSDN上用积分下载的一个例子 VBA数组 VBA调试运行进入: 右键Excel的Sheet ...

  10. WORD表格中的文字总是靠上居中不了

    WORD表格中的文字总是靠上居中不了 将表格选中 然后,点击格式工具栏里的格式(第一个项目)右侧的小三角(通常显示为正文),选择清除格式,然后,再用表格与边框工具栏中的居中功能设置居中就可以了 将表格 ...