测试一下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("运行我所需的其他代码隐藏了");