中文动态网页

ChineseActivePage(CAP)

交流QQ群号:80116347

v1.8用户帮助文档)

下载CAP环境

1.     简介

2.     语法

1.     操作符

2.     变量

3.     变量数组

4.     函数

5.     逻辑控制

6.     数据类型

3.     编辑器

4.     输入输出

1.     内置常量及变量

2.     输出数据

3.     读入数据

5.     安装CAP

1.     Windows IIS安装

2.     Linux Nginx安装

3.     Linux Apache安装

6.     CAP包目录结构

7.     CAP对象

8.     开发者

1.     扩展开发

2.     库函数开发

1.     简介

l  CAP背景:

ChineseActivePage简称CAPCAP项目从2014年开发,到至今经历几次大变动。目前最新版本1.8。由Ewangl独立维护。CAP开发初衷是为了中小学生使用中文学习开发web应用,发展至今也可写本地应用。
CAPEwangl构思开发,中途有志同道合朋友参与创建工作室合作开发,后来都已退出,由Ewangl独立维护开发。

 

l  CAP特点:

中文后端脚本,母语编程。语法简单,容易入门。可扩展函数库,可作为插件被其它软件加载。跨平台(主流支持Windows/Linux/MacOS,其它平台可定制),部署简单。可替代PHPASPJSP等语言。

 

l  CAP授权:

CAP环境是公益项目,永久免费,自由软件,无需授权,开放API,可个人及企业完全调用而无需告知。排除第三方商业库及其它收费。

 

2.     语法

1.     操作符

转义字符

作用

说明

\a

响铃

标准输出设备输出字符'\a'时,系统自带的扬声器(或蜂鸣器)会发出“叮”的一声

\b

退格

可以在输出中删除刚输出的一个字符

\0

空字符(NULL)

字符串结尾符 \0

\n

换行

切换到下一行

\r

回车

移动到本行开始

\t

横向制表

\v

纵向制表

\\

反斜杠

\\” 表示 \

\"

双引号

\”” 表示 “

\'

单引号

\'” 表示 '

..

文本连接

连接两个文本  ab = a .. b

 

数学计算

作用

说明

+

加法

2 = 1 + 1

-

减法

1 = 2 - 1

*

乘法

2 = 1 * 2

/

除法

2 = 4 / 2

%

取余

1 = 3 % 2

^

乘幂

100 = 10 ^ 2

-

负数

-10 = -10

//

整除

2 = 3 // 2

 

位运算

作用

说明

&

按位与

(3 & 5) --输出1

|

按位或

(3 | 5) --输出7

~

按位异或

(3 ~ 5) --输出6

<< 

按位左移

(3 << 2) --输出12

>> 

按位右移

(5 >> 1) --输出2

 

逻辑比较

作用

说明

==

等于

1 == 1

!=

不等于

1 != 2

大于

2 > 1

小于

1 < 2

>=

大于等于

2 >= 1

<=

小于等于

1 <= 2

 

逻辑运算

作用

说明

运算

都为真=真,否则=

运算

含真=真,都为假=

运算

假真=真,假=假,真真=假,取反

运算

逻辑真

运算

逻辑假

 

-- 行注释内容! --[[多行注释内容!]]

 

2.     变量

全局变量:变量名 = "变量值"
局部变量:局部 变量名 = “变量值”
多个变量:变量1, 变量2, 变量3 = "1", 2, 3.1
交换变量:变量1, 变量2 = 变量2, 变量1

 

3.     数组/键值

数组:变量名 = { }
数组:变量名1 = { 1, 2, 3 }
数组赋值:变量名[1] = 0
多维数组: 变量名2 = { { 1, 2, 3 }, 2, 3 }
键值: 变量名 = { 名字 = ewangl, 函数 = 函数1 , = 100 }
键值赋值: 变量名[名字] = “内容”

提示:值可以为任意基础数据类型!

 

4.     函数

原型:
函数 [函数名]([参数])
    ... 过程代码
    返回 返回值
结束
例子:
函数 加法计算 (加数, 被加数)
       局部 数值 = 加数 + 被加数
       返回 数值
结束
变量与函数:
运算 = { a = 1, b = 2 }
运算.加法函数 = 函数 (加数, 被加数)
       局部 数值 = 加数 + 被加数
       返回 数值
结束
= 运算.加法函数( 运算.a, 运算.b )

 

5.     逻辑控制

原型 如果:
如果 [条件]
       ... 过程代码
否则如果 [条件]
       ... 过程代码
否则
       ... 过程代码
结束
原型 判断循环:
判断循环首 [条件] 进入
       ... 过程代码
结束
原型 循环判断:
循环判断首
       ... 过程代码
循环判断尾 [条件]
原型 变量循环:
变量循环 [变量] = [初始值], [结束值] 进入
... 过程代码
结束
跳出      用于跳出一个循环!
例子:
累加值 = 0
变量循环 i = 1, 10 进入
累加值 = 累加值 + 1
结束
核心函数.发送文本(累加值)
例子:
次数 = 10
循环判断首
       次数 = 次数 - 1
循环判断尾 次数 != 1
核心函数.发送文本(次数)

 

6.     数据类型

逻辑运算

说明

数值型

0.20.8111.5 ...

整数型

1234 ...

字节集型

字节数组!图片等数据

文本型

“文本值”,'文本型'[[长文本值]]

逻辑型

真,假

指针型

C/C++指针

无效值!

 

3.     编辑器

注意:CAP环境无需下载CAP编辑器,但CAP编辑器运行必须要部署CAP环境!
编辑器需要订阅!

 

4.     输入输出

ü  CAP的输入输出都是由核心函数完成!
ü  核心函数是CAP扩展统一导出的接口函数!
ü  不同扩展导出可能存在不一致!希望开发者尽量保持一致!
ü  学会使用CAP,学习核心函数是必须的,至关重要!

1.     内置常量及变量

ü  CAP除了逻辑控制语句,还存在内置变量!这些变量是由解释器内置。这些变量能让我们获取到一些有用的信息。

变量名(只读)

说明

CAP版本

文本型,CAP解释器版本号。

环境目录

文本型,CAP解释器环境路径。

缓存目录

文本型,CAP解释器缓存路径,临时目录。

库目录

文本型,CAP解释器函数库目录。

附加库目录

文本型,CAP解释器引用库目录。

日志路径

文本型,CAP解释器日志存放目录。

当前目录

文本型,执行当前CAP文件目录。

请求方式

文本型,WEB请求方式:“POST”,“GET”。

解释器号

文本型,CAP解释器当前指针十六进制文本。

链接变量

文本型,链接 ? 后面内容。

表单变量

文本型,POST内容。

ü  CAP存在3个可读写内置变量,用于与web服务器通讯。

变量名(读写)

说明

状态码

文本型,WEB回复,“200 OK

附加协议头

文本型,WEB回复。“头名=头值\r\n

保持连接

整数型,WEB回复。

2.     输出数据

ü  CAP可以通过核心函数中命令输出数据
Ø  CAP日志:
往内置日志文件写入一段文本,log目录,一般用于记录运行信息及错误。参数(内容【文本型】)
核心函数.CAP日志(“内容”)
Ø  发送检索:
发送CAP状态及加载信息到浏览器。
核心函数.发送检索()
Ø  置存根变量:
设置cookie信息。参数(变量名【文本型】,失效时间【整数型 分钟 0当浏览器关闭后失效】,路径【文本型 /】,域名【文本型】,内容【文本型】)
核心函数.置存根变量(user, 0, “”, “”, admin)
Ø  发送文本:
写出文本,一般是html代码等文本。参数(文本【文本型】)
核心函数.发送文本(“这是一段文本!”)
Ø  发送数据:
写出数据,一般是图片等数据。参数(数据【字节集】)
核心函数.发送数据(data)
Ø  发送下载:
写出数据,让其下载。参数(数据【字节集】,保存文件名【文本型】)
核心函数.发送下载(data)
Ø  发送文件:
写出文件,让其下载。参数(文件路径【文本型】)
核心函数.发送下载(“文件名.mp4)
Ø  发送自定义:
自定义头及内容。参数(内容【通用型】)
核心函数.发送自定义(str)
Ø  发送跳转:
让浏览器跳转到指定页面。参数(URL地址【文本型】)
核心函数.发送跳转(http://www.baidu.com/)

3.     读入数据

ü  CAP解释器还存在三个随机化变量:
获取内置变量:GET_变量名、POST_变量名 (application/x-www-form-urlencoded)COOKIE_变量名、ENV_环境变量名。
Ø  GET_[变量名]
通过此变量可以读取链接变量。
例如:index.cap?id=1&user=admin&pwd=123456
以上这个链接,我们可以使用变量来获取iduserpwd
GET_idGET_userGET_pwd
Ø  POST_[变量名]
通过此变量可以读取表单变量。
例如:user=admin&pwd=123456
以上这个表单值,我们可以使用变量来获取userpwd
POST_userPOST_pwd
Ø  COOKIE_[变量名]
通过此变量可以读取Cookie变量。
例如:user=admin; pwd=123456
以上这个Cookie值,我们可以使用变量来获取userpwd
COOKIE_userCOOKIE_pwd
Ø  ENV_[环境变量名]
通过此变量可以读取环境变量(/IP/客户 等)
l  在使用这些随机变量之前,我们必须进行判断是否为空,检查是否存在,再调用变量!
方式:
如果 GET_user == GET_pwd ==
       核心函数.发送文本(“请求数据不完整!”)
否则
       核心函数.发送文本(“你请求的user:” .. GET_user)
结束

5.     安装CAP

CAP环境目录必须放置以下路径:
WindowsC:\CAP
Linux/home/CAP
MacOS/Users/CAP
ü  oracle需要OCCI
ü  ODBC需要相应ODBC驱动

1.     Windows IIS安装

QQ截图20221111192924

Iis推介ISAPIFastCGI扩展方式。
可选 添加默认文档 index.cap

2.     Linux Nginx安装

推介FastCGI方式
启动CAPFastCGI套接字进程 ./CAP_FPM.out 生产环境请把此程序加入systemclt
也可使用第三方进程管理器 spawn-fcgi 启动,spawn-fcgi -a 127.0.0.1 -p 9001 -f /home/CAP/CAP_FastCGI.out
Nginx网站下配置:

location ~ \.cap$

       {

              root /web       #根路径

              fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

              fastcgi_param  QUERY_STRING       $query_string;

              fastcgi_param  REQUEST_METHOD     $request_method;

              fastcgi_param  CONTENT_TYPE       $content_type;

              fastcgi_param  CONTENT_LENGTH     $content_length;

 

              fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

              fastcgi_param  REQUEST_URI        $request_uri;

              fastcgi_param  DOCUMENT_URI       $document_uri;

              fastcgi_param  DOCUMENT_ROOT      $document_root;

              fastcgi_param  SERVER_PROTOCOL    $server_protocol;

              fastcgi_param  REQUEST_SCHEME     $scheme;

              fastcgi_param  HTTPS              $https if_not_empty;

 

              fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;

              fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

 

              fastcgi_param  REMOTE_ADDR        $remote_addr;

              fastcgi_param  REMOTE_PORT        $remote_port;

              fastcgi_param  SERVER_ADDR        $server_addr;

              fastcgi_param  SERVER_PORT        $server_port;

              fastcgi_param  SERVER_NAME        $server_name;

              fastcgi_pass 192.168.30.2:9002;

              fastcgi_index index.cap;

}

3.     Linux Apache安装

CAPHttpd的模块。直接配置文件导入即可。CAP_Apache.so
LoadModule CAP_module /home/CAP_Apache.so

6.     CAP包目录结构

Developer/         开发者文件
Linux_Arm_64/   基于Linux系统ARM64 CAP
Linux_x86_64/    基于Linux系统AMD64 CAP
Windows_x86_64/    基于Windows系统AMD64 CAP
MacOS_x86_64/        基于MacOS系统AMD64 CAP
Linux_loongarch64/  基于Linux系统loongarch64 CAP
包内含CAPCAPEditor文件夹。前者必有,后者某些平台未提供。
CAP目录:
CAP/bin       某些CAP库需要加载的动态库文件(非必须,也可存在系统库搜寻目录。)
CAP/lib        CAP的库文件,CAP的函数由这些库导出。
CAP/log       CAP的日志文件,可选择删除(不记录日志)
CAP/temp   CAP的临时缓存目录!这是必须的。否则会影响很多函数及扩展执行。

7.     CAP对象

一个对象的使用首先需要创建!最后释放!
CAP一些库中,引入了类概念。
Ø  类的创建:
       = 库名.类名()
Ø  类的属性:
       .属性 =
Ø  类的方法:
       :方法()
Ø  类的释放:
       ()

jsn = JSONCPP.json()

jsn:置数据("info", 0, "姓名", "admin")

jsn:置数据("info", 0, "年龄", 18)

jsn:置数据("info", 0, "手机号", "123456789012")

str = jsn:取文本()

jsn()

核心函数.发送文本(str)

某些场合下,我们可以利用CAP封装共用函数,也叫模块。

-- mod.cap

CAPMod = { }

CAPMod.常量1 = 10

CAPMod.加法计算 = 函数 (a, b)

       返回 a + b

结束

--index.cap

加载模块(mod)

val = CAPMod.加法计算(CAPMod.常量1, 2)

核心函数.发送文本(val )

CAP模块搜寻目录为当前目录。相对路径!

8.     开发者

1.     扩展开发

CAP基于C语言开发!
ü  扩展开发:按照CAP当前CGIFCGI导出相同函数为WEB服务,我们称为CAPWEB扩展。
ü  CAP是脚本,我们可以嵌入自己程序中,实现CAP代码的执行。我们称为宿主程序。
ü  CAP.h   定义了CAP的完整CAPI
ü  Load.h  定义并实现了C/C++ CAP解释器的加载及简化了CAP.h内 解释器/库 实现。加载函数需要lib CAPLoad_xx.x
CAP封装了火山PC库,可参阅Developer,这里不做指导。

//加载CAP头文件

#include "Load.h"

 

struct _CAPInterface* API; //全局接口

 

//CAP日志

int wlog(void* Ip) {

       int i = 0;

       if (API->GetArgN(Ip) != 0)  //判断参数数量是否0

{

              for (i = 0; i < API->GetArgN(Ip); i++) //循环参数

              {

                     API->WriteLog(API->CAP, API->GetStr(Ip, i + 1)); //取出文本参数写入日志

              }

       }

       return 0; //返回值个数0

}

 

//函数表

struct _CAPLib_Func Func[] = {

       "CAP日志", "-", 1, wlog

// …………….

};

 

//库定义 …

struct _CAPLib Lib = {

       Lib_State_OK,

       "核心函数",

       "Ewangl工作室",

       "1.8",

       "web服务通讯的一组函数。内置变量:GET_变量名、POST_变量名、COOKIE_变量名",

       Func, //函数

       sizeof(Func) / sizeof(struct _CAPLib_Func), //函数个数

       NULL, //

       0, //类个数

       NULL, //常量

       0 //常量个数

};

 

//CAP扩展函数入口

struct _CAPLib* LibMain(struct _CAPInterface* Interface)

{

       API = Interface;

       return &Lib; //返回导出的库

}

 

//程序入口

int main()

{

static struct _CAP CAP; //CAP环境

static _CAP_Initializa Initializa; //初始化函数

static _CAP_Destroy Destroy; //销毁函数

 

       CAPLoad(NULL, &Initializa, &Destroy); //加载CAP解释器模块

       Initializa(&CAP, CAP_ExtendedName, NULL, LibMain, LogLevel_All); //初始化CAP环境

      

       //调用执行代码

       CAP->Execute(CAP, “代码全局路径”, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

       //执行代码结束

 

       Destroy(&CAP); //释放CAP环境

       CAPDel(); //释放CAP解释器模块

}

上面就是整个扩展流程,实际开发中根据实际传递参数!

2.     库函数开发

在扩展开发中,也应用了库的开发(扩展导出自身函数)

 

//库的入口定义

CExport DllExport struct _CAPLib* LibMain(struct _CAPInterface* Interface)

{

       SETUTF8; //CAP必须UTF8

       API = Interface; //接口跑向全局

       return &Lib; //返回导出库结构 参见上面 struct _CAPLib Lib 定义

}

 

详细API请参阅头文件。

 

修订:2026.05.01

Email: admin@ewangl.cn

ICP备17037879号-1