2024-07-03  2024-07-03    2004 字  4 分钟
- Test

测试一下codapi能不能用

Codapi 是专门为嵌入文章、产品文档、在线课程、移动应用程序等而设计的,所以它非常轻量级。可以通过很简单的方式将其集成到自己的网页中。下面测试一下自定义的代码块功能是否可用。(test标签中的文章是用来测试网页的功能是否可用,没有阅读价值)

我是正常的codeblock

为了不然所有的代码块都高亮显示,对代码块的渲染规则做了自定义,下面测试能否显示普通的代码块。

print("Hello python")
print("Hello python")
print("Hello python")
    

我是bash代码

测试高亮代码块格式能否使用。首先测试一种没在服务器上部署的代码类型,正常情况下,应该显示出代码高亮的样式,但是代码后面不显示运行按钮。

# 显示当前的Git配置
$ git config --list
# 定义当前用户所有提交使用的作者邮箱。
$ git config --global alias.<alias-name <git-command>
# 为Git命令创建一个快捷方式(别名)。
$ git config --system core.editor <editor>

我是java代码

测试一下代码块高亮功能和运行功能能否使用,首先测试java代码块。正常情况下,下面的java代码将被高亮,并且代码后面会出现一个 Run 按钮,点击可以运行代码块中的代码。

import java.util.*;
public class Main {
	public static void main(String[] args){ testArrayList(); }
    //除了集合通用的操作外,还有以下方法
	static void testArrayList(){
		System.out.println("-------- ArrayList 的 API 测试 --------");
		java.util.List list = new ArrayList();
		list.add("孙悟空");
		list.add("沙和尚");
		System.out.println("0. list中,添加了三个元素后: " + list);
		list.add(1,"猪八戒");
		System.out.println("1. list: " + list);
		System.out.println("2. list中,索引为1的元素为: " + list.get(1));
		System.out.println("3. list中,猪八戒第一次出现的索引为: " + list.indexOf("猪八戒"));
		list.add("猪八戒");
		System.out.println("4. list中,猪八戒最后一次出现的索引是: " + list.lastIndexOf("猪八戒"));
		System.out.println("   list.remove(1) : " + list.remove(1));
		System.out.println("5. list中,删除索引为1的元素后: " + list);
		System.out.println("   list.set(1,\"白龙马\") : " + list.set(1,"白龙马"));
		System.out.println("6. list中,将索引为1的元素替换为暴龙马后: " + list);
		java.util.List subList = list.subList(0,2);
		System.out.println("7. list.subList(0,2) = " + subList);
	}
}

我是python代码

测试一下代码块高亮功能和运行功能能否使用,然后测试python代码块。正常情况下,下面的python代码将被高亮,并且代码后面会出现一个 Run 按钮,点击可以运行代码块中的代码。

print("Hello python")
print("Hello codapi")

我是cpp代码

测试一下代码块高亮功能和运行功能能否使用,首先测试 c++ 代码块。正常情况下,下面的 c++ 代码将被高亮,并且代码后面会出现一个 Run 按钮,点击可以运行代码块中的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "randapi.h"
#include "ecdh_NIST256.h"
using namespace core;
using namespace NIST256;
int main()
{
    int i, res;
    // 初始化强随机函数
    csprng RNG;                // Crypto Strong RNG
    unsigned long ran;
    char raw[100];
    octet RAW = {0, sizeof(raw), raw};
    time((time_t *)&ran);
    RAW.len = 100;              // fake random seed source
    RAW.val[0] = ran;
    RAW.val[1] = ran >> 8;
    RAW.val[2] = ran >> 16;
    RAW.val[3] = ran >> 24;
    for (i = 4; i < 100; i++) RAW.val[i] = i;
    CREATE_CSPRNG(&RNG, &RAW);  // initialise strong RNG
    // 初始化强随机函数结束
    printf("Testing ECDSA for curve NIST256\n");
    // 待签名的消息
    char *pp = (char *)"hello world!";
    char m[32];
    memcpy(m,pp,strlen(pp)+1);
    printf("messaage: %s\n",m);
    octet M = {sizeof(m), sizeof(m), m};
    // 公私钥
    char s1[EGS_NIST256],  w1[2 * EFS_NIST256 + 1];
    octet S1 = {0, sizeof(s1), s1};
    octet W1 = {0, sizeof(w1), w1};
    // 签名(由2部分组成)
    char ds[EGS_NIST256], cs[EGS_NIST256];
    octet DS = {0, sizeof(ds), ds};
    octet CS = {0, sizeof(cs), cs};
    // 产生随机公私钥
    ECP_KEY_PAIR_GENERATE(&RNG, &S1, &W1);
    // 验证下密钥生成对不对
    res = ECP_PUBLIC_KEY_VALIDATE(&W1);
    if (res != 0)
    {
        printf("ECP Public Key is invalid!\n");
        return 0;
    }
    //  公私钥的输出
    printf("Servers private key= 0x");
    OCT_output(&S1);
    printf("Servers public key= 0x");
    OCT_output(&W1);
    // 签名
    if (ECP_SP_DSA(HASH_TYPE_NIST256, &RNG, NULL, &S1, &M, &CS, &DS) != 0)
    {
        printf("***ECDSA Signature Failed\n");
        return 0;
    }
    printf("Signature C = 0x");
    OCT_output(&CS);
    printf("Signature D = 0x");
    OCT_output(&DS);
    // 验签
    if (ECP_VP_DSA(HASH_TYPE_NIST256, &W1, &M, &CS, &DS) != 0)
    {
        printf("***ECDSA Verification Failed\n");
        return 0;
    }
    else
    {
        printf("ECDSA Signature/Verification succeeded\n");
    }
    printf("if we modify the message...\n");
    M.val[0]='A';
    printf("modified message: %s\n",m);
    if (ECP_VP_DSA(HASH_TYPE_NIST256, &W1, &M, &CS, &DS) != 0)
    {
        printf("***ECDSA Verification Failed\n");
        return 0;
    }
    else
    {
        printf("ECDSA Signature/Verification succeeded\n");
    }
    KILL_CSPRNG(&RNG);
}

创建 codeapi 的 template

上面的代码运行需要将所有的代码都写在代码块中,某些情况下,我们可能不需要展示所有的代码,只展示代码中的核心部分,但是整个代码必须还能够正常运行,这里通过两种方式实现了这个功能,下面分别测试这个功能是否可用。

1. 提前定义模板

可以预定义一些模板,在代码块运行的时候之间使用模板,例如,这里预定义了 java 类 public class Main{ ##CODE## },代码块中的部分会替换掉模板中的 ##CODE## 部分。

public static void main(String[] args){
    System.out.println("我是使用Template main.java的Java代码");
    System.out.println("运行我所需的其他代码隐藏了");
}

2. 写博客时自定义模板

预定义模板的方式不够灵活,下面这种方式可以实现跟灵活的模板使用。我们可以通过下面的方式在写markdown文件的时候自定义模板的内容,例如,通过下面的语法预定义一个模板,并在下面的代码块中调用它,代码块中的部分会替换掉模板中的 ##CODE## 部分。

可以使用下面框框内的语法创建codapi 的 template,
其中 name 表示下面codapi代码中的 $template
<codapi-snippet sandbox={{.Type}} editor="base" template="{{$template}}">
</codapi-snippet>
---------------------------------------------------------------------
    |       ```template {name="temp.java"}                      |
    |       public class Main{                                  |
    |           public static void main(String[] args){         |
    |               ##CODE##                                    |
    |           }                                               |
    |       }                                                   |
    |       ```                                                 |
---------------------------------------------------------------------
    

在上述的模板定义中,模板的name被定义为 temp.java , 因此,这里创建的代码块的时候传入一个 {template=“temp.java”} 来使用这个模板即可。

    System.out.println("我是使用Template temp.java的Java代码");
    System.out.println("运行我所需的其他代码隐藏了");