c++TinML转html

c++TinML转html

  • 前言
  • 解析
  • 解释
  • 转译html
    • 类定义
    • 开头html
  • 结果
    • 这是最终效果(部分): ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6cf6c3e3c821446a84ae542bcc2652d4.png)

前言

在python.tkinter设计标记语言(转译2-html)中提到了将TinML转为静态html的python实现方法;在HtmlRender - c++实现的html生成类中又提供了我自己写的基于c++编辑html的简单方式,这篇笔记就是使用c++将tinml转为静态html。

本示例未使用任何第三方库(除了我之前提供的HtmlRender类),但是在html中代码高亮方面使用了在线的highlight.js

整套流程下来和基于python的TinText平台类似,都是先解析TinML标记文本段,再给每个标记赋以特定含义(解释过程),最后通过这些解释后的内容生成html结构,生成html文本。

项目示例:CppTinParser: TinML to html by c++

解析

这一部分是对TinML标记的语法解析。

class TinLexer{

public:
    TinLexer(string contents){
        this->content = '\n' + contents + '\n';
    }

    void run_test();
    vector<string> run();
    vector<map<string,vector<string>>> lex();

private:
    string content;

};

主要解析功能就是对每一行TinML标记文本段进行基于上下文标记的正则匹配和结构解析,这部分相当于TinText项目中的TinParser

  • 单行TinML标记,分为标记名称和标记参数组
  • 多行模式TinML,转为单行TinML标记解析后格式

部分代码如下:

vector<map<string,vector<string>>> TinLexer::lex(){
    // 预处理
    // tackle : add context of the specific TinML file into this->content
    // 此部分代码省略,可见程序源码
    // ...

    vector<map<string,vector<string>>> tinresults;//总结果
    
    vector<string> contents;
    string nowtag;//当前标签

    contents = split(this->content, '\n');

    bool Lines = false;//多行模式
    regex pattern("^<(.*?)>(.*)");
    smatch result;
    vector<string> args;//参数列表
    
    for (const auto &i : contents){
        if (size(i) == 1){
            // 实际上是empty,不过貌似写不对
            // 既有可能是因为getline将\n转为\0,导致该字符串截止
            continue;
        }
        
        if (size(i)>=2 && i.substr(0,2)=="|-"){
            //  cout << "Comment: " << i << endl;
            continue;
        }

        map<string,vector<string>> lineargs;//单行参数

        if (Lines){
            if (i[0]=='|'){
                if (size(i)>2 && i[i.length()-2]!='|'){
                    string content = i.substr(1,size(i)-2);
                    args.push_back(subreplace(content, "%VEB%", "|"));
                }else if (size(i)==2){
                    args.push_back("");
                }else{
                    string content = i.substr(1,size(i)-3);
                    args.push_back(subreplace(content, "%VEB%", "|"));
                    // for (auto const &j : args){
                    //     cout << "Arg: " << j << endl;
                    // }
                    lineargs[nowtag] = args;
                    tinresults.push_back(lineargs);
                    args.clear();
                    Lines = false;
                }
            }
        }else if (i[i.length()-2] == ';'){
            // getline最后一个为\0,因此-2
            // string本身不以\0结尾,但是getline会改成\0
            Lines = true;
            bool ismatch = regex_search(i, result, pattern);
            if (ismatch){
                // cout << "Tag: " << result[1] << endl;
                nowtag = result[1];
                string content = result[2];
                int lastindex = content.find_last_of(';');
                content = content.substr(0, lastindex);
                args.push_back(subreplace(content, "%VEB%", "|"));
            }else{
                cout << "\033[33;1m不可被解析,当作

处理:" << i << "\033[0m" << endl; args.push_back(subreplace(i, "%VEB%", "|")); lineargs["p"] = args; tinresults.push_back(lineargs); args.clear(); } }else{ bool ismatch = regex_search(i, result, pattern); if (ismatch){ nowtag = result[1]; string content = result[2]; auto oargs = split(content, '|'); for (auto const &j : oargs) args.push_back(subreplace(j, "%VEB%", "|")); lineargs[nowtag] = args; tinresults.push_back(lineargs); args.clear(); }else{ //无法匹配当作p处理 cout << "\033[33;1m不可被解析,当作

处理:" << i << "\033[0m" << endl; args.push_back(subreplace(i, "%VEB%", "|")); lineargs["p"] = args; tinresults.push_back(lineargs); args.clear(); } } } return tinresults; }

这里还遇到一个坑,string.getline会将分割字符转为\0,这样导致string类型变量所包含的文字比表达的文字多一个“字”。string的设计是不包含的\0,所以要注意从string类型中取字符的下标。

解析过程是最基础的,也几乎不会再维护,毕竟TinML的语法就这样了。

解释

这和TinText软件中转译html的过程一样,只不过TinEngine在渲染之前就生成了解释内容并传递给了转译器,而CppTinParser需要单独进行参数解释。

首先,生成每个标记对应的参数含义:

static map<string, vector<string>> tinkws;

void loadkws()
{
    // 标记对应的参数键
    tinkws["ac"] = {"name"};
    tinkws["anchor"] = {"name"};
    tinkws["code"] = {"type", "codes"};
    tinkws["fl"] = {};
    tinkws["follow"] = {};
    tinkws["html"] = {"htmls"};
    tinkws["img"] = {"name", "url", "size"};
    tinkws["image"] = {"name", "url", "size"};
    tinkws["lnk"] = {"text", "url", "description"};
    tinkws["link"] = {"text", "url", "description"};
    tinkws["a"] = {"text", "url", "description"};
    tinkws["ls"] = {"lists"};
    tinkws["list"] = {"lists"};
    tinkws["n"] = {"notes"};
    tinkws["note"] = {"notes"};
    tinkws["nl"] = {"lists"};
    tinkws["numlist"] = {"lists"};
    tinkws["p"] = {"texts"};
    tinkws["pages"] = {"name"};
    tinkws["/page"] = {""};
    tinkws["/pages"] = {""};
    // 展示到这里位置,当然,这不是完整的
    //...
}

由于之前已经生成了类似如下的数据结构:

(
	("",("title","1"),),
	("<p>",("paragraph",)),
	...
)
</code></pre> 
  <p>现在,就需要把这些已经分割好的标记文本转为有意义的内容:</p> 
  <pre><code>(
	("<title>",("title": "title", "level": "1"),),
	("<p>",("paragraph": ("paragraph",))),
	...
)
</code></pre> 
  <p>这里采用的逻辑是对一个标签所拥有的所有参数一一对应,多出来的统一给最后一个参数。</p> 
  <p>这部分逻辑实现如下:</p> 
  <pre><code class="prism language-cpp">map<span class="token operator"><</span>string<span class="token punctuation">,</span> string<span class="token operator">></span> <span class="token function">tokeywords</span><span class="token punctuation">(</span>string tag<span class="token punctuation">,</span> vector<span class="token operator"><</span>string<span class="token operator">></span> contents<span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token comment">// 将列表顺序参数转为键、值类参数</span>
    map<span class="token operator"><</span>string<span class="token punctuation">,</span> string<span class="token operator">></span> keywords<span class="token punctuation">;</span>
    cout <span class="token operator"><<</span> <span class="token string">"Tag: "</span> <span class="token operator"><<</span> tag <span class="token operator"><<</span> endl<span class="token punctuation">;</span>
    keywords<span class="token punctuation">[</span><span class="token string">"tag"</span><span class="token punctuation">]</span> <span class="token operator">=</span> tag<span class="token punctuation">;</span>

    <span class="token keyword">int</span> args_num <span class="token operator">=</span> contents<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">int</span> index <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> kws <span class="token operator">:</span> tinkws<span class="token punctuation">[</span>tag<span class="token punctuation">]</span><span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>index <span class="token operator">>=</span> args_num<span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            <span class="token comment">// 剩下键全为空</span>
            keywords<span class="token punctuation">[</span>kws<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span>
            <span class="token keyword">continue</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        keywords<span class="token punctuation">[</span>kws<span class="token punctuation">]</span> <span class="token operator">=</span> contents<span class="token punctuation">[</span>index<span class="token punctuation">]</span><span class="token punctuation">;</span>
        <span class="token comment">// cout << kws << " = " << contents[index] << endl;</span>
        index<span class="token operator">++</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">if</span> <span class="token punctuation">(</span>index <span class="token operator"><</span> args_num<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token comment">// 将剩下的参数全部放入最后一个键中</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> index<span class="token punctuation">;</span> i <span class="token operator"><</span> args_num<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            keywords<span class="token punctuation">[</span>tinkws<span class="token punctuation">[</span>tag<span class="token punctuation">]</span><span class="token punctuation">.</span><span class="token function">back</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span> <span class="token operator">+=</span> <span class="token string">"\n"</span> <span class="token operator">+</span> contents<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> kw <span class="token operator">:</span> keywords<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>kw<span class="token punctuation">.</span>first <span class="token operator">==</span> <span class="token string">"tag"</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span> <span class="token comment">// 跳过tag键</span>
            <span class="token keyword">continue</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        cout <span class="token operator"><<</span> kw<span class="token punctuation">.</span>first <span class="token operator"><<</span> <span class="token string">" = "</span> <span class="token operator"><<</span> kw<span class="token punctuation">.</span>second <span class="token operator"><<</span> endl<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">return</span> keywords<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> 
  <pre><code class="prism language-cpp"><span class="token keyword">class</span> <span class="token class-name">TinParser</span>
<span class="token punctuation">{</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token function">TinParser</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span> vector<span class="token operator"><</span>string<span class="token operator">>></span><span class="token operator">></span> contents<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        <span class="token keyword">this</span><span class="token operator">-></span>contents <span class="token operator">=</span> contents<span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    <span class="token keyword">void</span> <span class="token function">parse</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token keyword">void</span> <span class="token function">render</span><span class="token punctuation">(</span>string file<span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token keyword">private</span><span class="token operator">:</span>
    vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span> vector<span class="token operator"><</span>string<span class="token operator">>></span><span class="token operator">></span> contents<span class="token punctuation">;</span>
    vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span> string<span class="token operator">>></span> result<span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>

<span class="token keyword">void</span> <span class="token class-name">TinParser</span><span class="token double-colon punctuation">::</span><span class="token function">parse</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
    <span class="token comment">// 判断tag是否存在</span>
    contents <span class="token operator">=</span> <span class="token keyword">this</span><span class="token operator">-></span>contents<span class="token punctuation">;</span>
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> content <span class="token operator">:</span> contents<span class="token punctuation">)</span>
    <span class="token punctuation">{</span>
        string tag <span class="token operator">=</span> content<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span>first<span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>tinkws<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>tag<span class="token punctuation">)</span> <span class="token operator">==</span> tinkws<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
        <span class="token punctuation">{</span>
            cerr <span class="token operator"><<</span> <span class="token string">"\033[33;1mtag not found: "</span> <span class="token operator"><<</span> tag <span class="token operator"><<</span> <span class="token string">"\033[0m"</span> <span class="token operator"><<</span> endl<span class="token punctuation">;</span>
            <span class="token comment">// //string转char</span>
            <span class="token comment">// char c_tag;</span>
            <span class="token comment">// strcpy(&c_tag, tag.c_str());</span>
            <span class="token comment">// throw NoTagName(c_tag);</span>
            <span class="token keyword">continue</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        map<span class="token operator"><</span>string<span class="token punctuation">,</span> string<span class="token operator">></span> results <span class="token operator">=</span> <span class="token function">tokeywords</span><span class="token punctuation">(</span>tag<span class="token punctuation">,</span> content<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span>second<span class="token punctuation">)</span><span class="token punctuation">;</span>
        result<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>results<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h2>转译html</h2> 
  <p>经过前面的准备,这里已经准备好了将TinML转译为html的所有信息。</p> 
  <p>由于在之前的文章中已经给出了<code>HtmlRender</code>的实现和使用示例,这里便不再赘叙。</p> 
  <p>这部分的代码和TinText的<code>tin2html.py</code>实现在逻辑上完全一致,甚至可以看作是python到c++的翻译。</p> 
  <h3>类定义</h3> 
  <pre><code class="prism language-cpp"><span class="token keyword">class</span> <span class="token class-name">TinRender</span> <span class="token punctuation">{</span>
    <span class="token comment">//tin->html类</span>
<span class="token keyword">public</span><span class="token operator">:</span>
    <span class="token function">TinRender</span><span class="token punctuation">(</span><span class="token keyword">const</span> string <span class="token operator">&</span>file<span class="token punctuation">)</span> <span class="token operator">:</span> <span class="token function">file_</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token punctuation">}</span>
    HtmlRender<span class="token operator">*</span> <span class="token function">render</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span>string<span class="token operator">>></span> content<span class="token punctuation">,</span> <span class="token keyword">bool</span> _style <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token keyword">bool</span> _code_style <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//转译为html</span>
    <span class="token keyword">void</span> <span class="token function">output</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span>string<span class="token operator">>></span> content<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//输出</span>
<span class="token keyword">private</span><span class="token operator">:</span>
    string file_<span class="token punctuation">;</span><span class="token comment">//html文件路径</span>
    ofstream fout_<span class="token punctuation">;</span><span class="token comment">//html文件输出流</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
</code></pre> 
  <h3>开头html</h3> 
  <p>就是html头中包含的样式、额外引入js、标题这些。</p> 
  <pre><code class="prism language-cpp">HtmlRender<span class="token operator">*</span> <span class="token class-name">TinRender</span><span class="token double-colon punctuation">::</span><span class="token function">render</span><span class="token punctuation">(</span>vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span> string<span class="token operator">>></span> content<span class="token punctuation">,</span> <span class="token keyword">bool</span> _style<span class="token punctuation">,</span> <span class="token keyword">bool</span> _code_style<span class="token punctuation">)</span><span class="token punctuation">{</span>
    <span class="token comment">//转译为HtmlRender。可以直接使用output方法转译+输出保存</span>
    <span class="token comment">//注意,CPPTinParser只是用c++实现的tinml转译器</span>
    <span class="token comment">//不作为TinML规范的检查器</span>
    string tag<span class="token punctuation">;</span>
    HtmlRender<span class="token operator">*</span> html <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"html"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    HtmlRender<span class="token operator">*</span> head <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"head"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    HtmlRender<span class="token operator">*</span> title <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"title"</span><span class="token punctuation">,</span> <span class="token string">"TinML"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    head<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>title<span class="token punctuation">)</span><span class="token punctuation">;</span>

    HtmlRender<span class="token operator">*</span> meta <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"meta"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"charset"</span><span class="token punctuation">,</span><span class="token string">"UTF-8"</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    head<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>meta<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//读取css文件</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>_style<span class="token punctuation">)</span><span class="token punctuation">{</span>
        string filename <span class="token operator">=</span> <span class="token string">"blubook.css"</span><span class="token punctuation">;</span>
        ifstream infile<span class="token punctuation">;</span>
        infile<span class="token punctuation">.</span><span class="token function">open</span><span class="token punctuation">(</span>filename<span class="token punctuation">.</span><span class="token function">data</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>   <span class="token comment">//将文件流对象与文件连接起来 </span>
        <span class="token function">assert</span><span class="token punctuation">(</span>infile<span class="token punctuation">.</span><span class="token function">is_open</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>   <span class="token comment">//若失败,则输出错误消息,并终止程序运行 </span>
        string s<span class="token punctuation">,</span> strAllLine<span class="token punctuation">;</span>
        <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">getline</span><span class="token punctuation">(</span>infile<span class="token punctuation">,</span> s<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            strAllLine <span class="token operator">+=</span> s <span class="token operator">+</span> <span class="token string">"\n"</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        infile<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>             <span class="token comment">//关闭文件输入流</span>
        HtmlRender<span class="token operator">*</span> style <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span> <span class="token punctuation">(</span><span class="token string">"style"</span><span class="token punctuation">,</span> strAllLine<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        head<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>style<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

    <span class="token comment">//<code>样式</span>
    <span class="token keyword">if</span> <span class="token punctuation">(</span>_code_style<span class="token punctuation">)</span><span class="token punctuation">{</span>
        HtmlRender<span class="token operator">*</span> codestyle <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"link"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"rel"</span><span class="token punctuation">,</span><span class="token string">"stylesheet"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"type"</span><span class="token punctuation">,</span> <span class="token string">"text/css"</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"href"</span><span class="token punctuation">,</span><span class="token string">"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/vs.min.css"</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        head<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>codestyle<span class="token punctuation">)</span><span class="token punctuation">;</span>
        HtmlRender<span class="token operator">*</span> codescript <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"script"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"src"</span><span class="token punctuation">,</span><span class="token string">"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        head<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>codescript<span class="token punctuation">)</span><span class="token punctuation">;</span>
        HtmlRender<span class="token operator">*</span> codestartscript <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"script"</span><span class="token punctuation">,</span> <span class="token string">"hljs.highlightAll();"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        head<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>codestartscript<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    
    HtmlRender<span class="token operator">*</span> _body <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"body"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    HtmlRender<span class="token operator">*</span> body <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"div"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"id"</span><span class="token punctuation">,</span><span class="token string">"content"</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    _body<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>body<span class="token punctuation">)</span><span class="token punctuation">;</span>
    html<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>head<span class="token punctuation">)</span><span class="token punctuation">;</span>
    html<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>_body<span class="token punctuation">)</span><span class="token punctuation">;</span>
    
    <span class="token comment">// 提前定义类型变量</span>
    HtmlRender<span class="token operator">*</span> table<span class="token punctuation">;</span>
    HtmlRender<span class="token operator">*</span> tbody<span class="token punctuation">;</span>
    <span class="token keyword">bool</span> tablehead <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>

    HtmlRender<span class="token operator">*</span> tabsview<span class="token punctuation">;</span>
    <span class="token keyword">bool</span> pagestag <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
    vector<span class="token operator"><</span>string<span class="token operator">></span> pagesnames<span class="token punctuation">;</span>
    vector<span class="token operator"><</span>map<span class="token operator"><</span>string<span class="token punctuation">,</span> string<span class="token operator">>></span> pagescontent<span class="token punctuation">;</span>
    <span class="token keyword">int</span> pagescount <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
    
    <span class="token comment">// ...</span>
<span class="token punctuation">}</span>
</code></pre> 
  <p>然后就是对每一个标记的单独转译,这些都在上面的那个方法里,这里给几个例子:</p> 
  <pre><code class="prism language-cpp"><span class="token comment">// ...</span>
        <span class="token comment">//常规转译TinML解析结果</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>tag <span class="token operator">==</span> <span class="token string">"ac"</span> <span class="token operator">||</span> tag <span class="token operator">==</span> <span class="token string">"anchor"</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            string name <span class="token operator">=</span> item<span class="token punctuation">[</span><span class="token string">"name"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>name<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token operator">==</span><span class="token char">'#'</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                <span class="token comment">//锚点链接</span>
                HtmlRender<span class="token operator">*</span> anchor <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"a"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"href"</span><span class="token punctuation">,</span> name<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                HtmlRender<span class="token operator">*</span> lastitem <span class="token operator">=</span> body<span class="token operator">-></span><span class="token function">children</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">back</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                lastitem<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>anchor<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
                <span class="token comment">//锚点定义</span>
                HtmlRender<span class="token operator">*</span> anchor <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"a"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"id"</span><span class="token punctuation">,</span> name<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                body<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>anchor<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>tag <span class="token operator">==</span> <span class="token string">"code"</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token comment">//代码块</span>
            <span class="token comment">//使用highlight.js,不支持tinml代码块</span>
            string type <span class="token operator">=</span> item<span class="token punctuation">[</span><span class="token string">"type"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            string codes <span class="token operator">=</span> item<span class="token punctuation">[</span><span class="token string">"codes"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>type <span class="token operator">==</span> <span class="token string">"tin"</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                type <span class="token operator">=</span> <span class="token string">"nohighlight"</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
                type <span class="token operator">=</span> <span class="token string">"language-"</span> <span class="token operator">+</span> type<span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
            HtmlRender<span class="token operator">*</span> pre <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"pre"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            HtmlRender<span class="token operator">*</span> code <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"code"</span><span class="token punctuation">,</span> codes<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"class"</span><span class="token punctuation">,</span>type<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            pre<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>code<span class="token punctuation">)</span><span class="token punctuation">;</span>
            body<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>pre<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>tag <span class="token operator">==</span> <span class="token string">"html"</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token comment">//html文本</span>
            string htmltext <span class="token operator">=</span> item<span class="token punctuation">[</span><span class="token string">"htmls"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            HtmlRender<span class="token operator">*</span> htmlcont <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span> htmltext<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            body<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>htmlcont<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>tag <span class="token operator">==</span> <span class="token string">"img"</span> <span class="token operator">||</span> tag <span class="token operator">==</span> <span class="token string">"image"</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token comment">//图片</span>
            string name <span class="token operator">=</span> item<span class="token punctuation">[</span><span class="token string">"name"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            string url <span class="token operator">=</span> item<span class="token punctuation">[</span><span class="token string">"url"</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>url<span class="token punctuation">.</span><span class="token function">empty</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                <span class="token comment">//因为CppTinParser只是用c++实现的tinml转译器</span>
                <span class="token comment">//不作为TinML规范的检查器,也不作为tin文件渲染环境</span>
                <span class="token comment">//所以不会有额外的资源文件储存位置</span>
                <span class="token comment">//因此,不支持从本地文件中导入图片</span>
                <span class="token keyword">continue</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
            vector<span class="token operator"><</span>string<span class="token operator">></span> size <span class="token operator">=</span> <span class="token function">render_split</span><span class="token punctuation">(</span>item<span class="token punctuation">[</span><span class="token string">"size"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token char">'x'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            string width <span class="token operator">=</span> size<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            string height <span class="token operator">=</span> size<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
            HtmlRender<span class="token operator">*</span> img <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"img"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"alt"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">}</span><span class="token punctuation">,</span><span class="token punctuation">{</span><span class="token string">"src"</span><span class="token punctuation">,</span> url<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"width"</span><span class="token punctuation">,</span> width<span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"height"</span><span class="token punctuation">,</span> height<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            body<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>img<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token comment">// ...</span>
<span class="token comment">// ...</span>
</code></pre> 
  <p>CppTinParser甚至给对<code><p></code>的解析也单独移植了TinText中的逻辑:</p> 
  <pre><code class="prism language-cpp"><span class="token keyword">void</span> <span class="token function">load_para</span><span class="token punctuation">(</span>HtmlRender<span class="token operator">*</span> p<span class="token punctuation">,</span> vector<span class="token operator"><</span>string<span class="token operator">></span> lines<span class="token punctuation">)</span><span class="token punctuation">{</span>
    <span class="token comment">//添加<p>内容</span>
    vector<span class="token operator"><</span><span class="token keyword">char</span><span class="token operator">></span> tags <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token char">'*'</span><span class="token punctuation">,</span><span class="token char">'-'</span><span class="token punctuation">,</span><span class="token char">'_'</span><span class="token punctuation">,</span><span class="token char">'/'</span><span class="token punctuation">,</span><span class="token char">'='</span><span class="token punctuation">,</span><span class="token char">'!'</span><span class="token punctuation">,</span><span class="token char">'^'</span><span class="token punctuation">,</span><span class="token char">'&'</span><span class="token punctuation">,</span><span class="token char">'#'</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
    regex <span class="token function">reg</span><span class="token punctuation">(</span><span class="token string">".*?!\\[(.*)\\]\\((.*)\\)"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    smatch result<span class="token punctuation">;</span>
    <span class="token keyword">int</span> count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>

    <span class="token keyword">if</span> <span class="token punctuation">(</span>lines<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
        <span class="token comment">//空行</span>
        HtmlRender<span class="token operator">*</span> br <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"br"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        p<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>br<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token keyword">return</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
    
    <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> <span class="token operator">&</span>line <span class="token operator">:</span> lines<span class="token punctuation">)</span> <span class="token punctuation">{</span>
        HtmlRender<span class="token operator">*</span> last <span class="token operator">=</span> p<span class="token punctuation">;</span><span class="token comment">//p最后一个元素</span>

        <span class="token keyword">if</span> <span class="token punctuation">(</span>line<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token char">' '</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token comment">//空格</span>
            string text <span class="token operator">=</span> line<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            HtmlRender<span class="token operator">*</span> p_item <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span> text<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            p<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>p_item<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">continue</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

        string head<span class="token punctuation">;</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>line<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><=</span><span class="token number">9</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            head <span class="token operator">=</span> line<span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
            head <span class="token operator">=</span> line<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token comment">//<p>开头标记需要连续</span>
        count <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
        <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">auto</span> <span class="token operator">&</span>tag_char <span class="token operator">:</span> head<span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">find</span><span class="token punctuation">(</span>tags<span class="token punctuation">.</span><span class="token function">begin</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> tags<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> tag_char<span class="token punctuation">)</span> <span class="token operator">!=</span> tags<span class="token punctuation">.</span><span class="token function">end</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                count<span class="token operator">++</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
                <span class="token keyword">break</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span>

        head <span class="token operator">=</span> head<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token keyword">if</span> <span class="token punctuation">(</span>count <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> p_item <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span> line<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            p<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>p_item<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">continue</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'*'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"b"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'/'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"i"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'_'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"u"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'-'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"s"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'='</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token comment">// = 和 # 只能存在一个</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"mark"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'#'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"code"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'^'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token comment">// ^ 和 & 只能存在一个</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"sup"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'&'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            HtmlRender<span class="token operator">*</span> nowlast <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"sub"</span><span class="token punctuation">,</span> <span class="token string">""</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>nowlast<span class="token punctuation">)</span><span class="token punctuation">;</span>
            last <span class="token operator">=</span> nowlast<span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token keyword">if</span> <span class="token punctuation">(</span>head<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token char">'!'</span><span class="token punctuation">)</span><span class="token operator">!=</span>string<span class="token double-colon punctuation">::</span>npos<span class="token punctuation">)</span><span class="token punctuation">{</span>
            <span class="token keyword">bool</span> ismatch <span class="token operator">=</span> <span class="token function">regex_match</span><span class="token punctuation">(</span>line<span class="token punctuation">,</span> result<span class="token punctuation">,</span> reg<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>ismatch<span class="token punctuation">)</span> <span class="token punctuation">{</span>
                string text <span class="token operator">=</span> result<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
                string url <span class="token operator">=</span> result<span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
                <span class="token keyword">if</span> <span class="token punctuation">(</span>text <span class="token operator">==</span> <span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
                    text <span class="token operator">=</span> url<span class="token punctuation">;</span>
                <span class="token punctuation">}</span>
                HtmlRender<span class="token operator">*</span> p_item <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">"a"</span><span class="token punctuation">,</span> text<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token string">"href"</span><span class="token punctuation">,</span>url<span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>p_item<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
                string text <span class="token operator">=</span> line<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span>count<span class="token punctuation">)</span><span class="token punctuation">;</span>
                HtmlRender<span class="token operator">*</span> p_item <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">HtmlRender</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">,</span> text<span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
                last<span class="token operator">-></span><span class="token function">add</span><span class="token punctuation">(</span>p_item<span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span>
            last<span class="token operator">-></span><span class="token function">configcnt</span><span class="token punctuation">(</span>line<span class="token punctuation">.</span><span class="token function">substr</span><span class="token punctuation">(</span>count<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> 
  <h2>结果</h2> 
  <p>这里用的是TinText项目中的<code>test.tin</code>。效果上来看,除了<code><code></code>中对TinML的缺失以及对在线图片、tinfile不支持外,其他几乎一样,而且对于大文件的转译绝对比python实现要快。</p> 
  <p>这是源文件(部分):<br> <a href="http://img.e-com-net.com/image/info8/416f2c4bc34242fabc1794ff4e175338.png" target="_blank"><img src="http://img.e-com-net.com/image/info8/416f2c4bc34242fabc1794ff4e175338.png" alt="c++TinML转html_第1张图片" width="1037" height="1309" style="border:1px solid black;"></a></p> 
  <hr> 
  <p><a href="http://img.e-com-net.com/image/info8/65761c676ac54d829a23efe3572f5c9b.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/65761c676ac54d829a23efe3572f5c9b.jpg" alt="c++TinML转html_第2张图片" width="650" height="295" style="border:1px solid black;"></a></p> 
  <h3>这是最终效果(部分):<br> <a href="http://img.e-com-net.com/image/info8/f92c2dd7145542c393c6c226d08b16cd.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/f92c2dd7145542c393c6c226d08b16cd.jpg" alt="c++TinML转html_第3张图片" width="650" height="812" style="border:1px solid black;"></a></h3> 
  <p><a href="http://img.e-com-net.com/image/info8/2011784b314a40f584f0aa97c83e358c.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/2011784b314a40f584f0aa97c83e358c.jpg" alt="c++TinML转html_第4张图片" width="650" height="330" style="border:1px solid black;"></a></p> 
 </div> 
</div>����
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1890205050433761280"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(笔记,c++,html)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1939100194608050176.htm"
                           title="浏览器的垃圾回收机制" target="_blank">浏览器的垃圾回收机制</a>
                        <span class="text-muted">甘露寺</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%B5%8F%E8%A7%88%E5%99%A8/1.htm">浏览器</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>深入解析现代浏览器的垃圾回收机制:分代回收与标记清除算法本文详细探讨了Chrome、Firefox等现代浏览器中JavaScript引擎的垃圾回收(GC)原理,重点讲解分代回收策略和标记清除/整理算法的工作流程,并通过示例帮助理解内存自动管理背后的机制。为什么需要垃圾回收?JavaScript是一种自动内存管理的语言。开发者通常不需要手动分配或释放内存(如C/C++中的malloc/free)。这</div>
                    </li>
                    <li><a href="/article/1939100196524847104.htm"
                           title="v-if、display、visibility、opacity隐藏元素的区别" target="_blank">v-if、display、visibility、opacity隐藏元素的区别</a>
                        <span class="text-muted">甘露寺</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/react/1.htm">react</a>
                        <div>前端元素隐藏与条件渲染完全指南(Vuevs.Reactvs.CSS)本文对比v-if、v-show、display:none、opacity:0、visibility:hidden以及React条件渲染的差异,帮你彻底掌握它们的适用场景!核心概念1.DOM树vs.渲染树DOM树:完整的HTML节点结构(无论是否隐藏)。渲染树:浏览器实际绘制到屏幕上的内容(隐藏元素可能被跳过)。2.关键差异特性是否</div>
                    </li>
                    <li><a href="/article/1939093766602289152.htm"
                           title="CSS 与 JavaScript 加载优化" target="_blank">CSS 与 JavaScript 加载优化</a>
                        <span class="text-muted">甘露寺</span>
<a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>CSS与JavaScript加载优化指南:位置、阻塞与性能让你的网页飞起来!本文详细解析CSS和JavaScript标签的放置位置如何影响页面性能,涵盖阻塞原理、浏览器机制和最佳实践。掌握这些知识可显著提升用户体验和SEO排名!一、核心问题:为什么位置很重要?浏览器渲染页面时需经历:解析HTML→2.下载资源→3.执行脚本→4.渲染页面错误的位置会阻塞关键路径,导致:⚠️长时间白屏(脚本阻塞)样式</div>
                    </li>
                    <li><a href="/article/1939089733514752000.htm"
                           title="衡水中学状元数学学习资料完整攻略" target="_blank">衡水中学状元数学学习资料完整攻略</a>
                        <span class="text-muted">向沙托夫问好</span>

                        <div>本文还有配套的精品资源,点击获取简介:《状元全科笔记衡水内部资料数学学习文档》提供了一个全面的数学学习资源,旨在通过衡水中学的教学经验和方法提升学生的数学成绩。资料包含基础知识、题型解析、模块训练、思维拓展和学习方法,引导学生深入理解数学概念,培养逻辑思维和解决问题的能力。文档结构清晰,内容详实,附带使用指南,帮助学生系统提升数学素养,实现学习效率和成绩的双重提高。1.状元学习方法分享在追求卓越成</div>
                    </li>
                    <li><a href="/article/1939080779246137344.htm"
                           title="ADIOS2 介绍与使用指南" target="_blank">ADIOS2 介绍与使用指南</a>
                        <span class="text-muted">东北豆子哥</span>
<a class="tag" taget="_blank" href="/search/HPC%2FMPI/1.htm">HPC/MPI</a><a class="tag" taget="_blank" href="/search/HPC/1.htm">HPC</a>
                        <div>文章目录ADIOS2介绍与使用指南什么是ADIOS2?ADIOS2的主要特点ADIOS2核心概念ADIOS2安装Linux系统安装Windows安装ADIOS2基本使用C++示例Python示例ADIOS2高级特性并行I/O流模式ADIOS2引擎类型性能优化建议总结ADIOS2介绍与使用指南什么是ADIOS2?ADIOS2(AdaptableInputOutputSystemversion2)是一</div>
                    </li>
                    <li><a href="/article/1939079015373533184.htm"
                           title="SqlServer基础学习笔记" target="_blank">SqlServer基础学习笔记</a>
                        <span class="text-muted">@半夏微凉科技</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E6%8B%93%E5%B1%95/1.htm">技术拓展</a><a class="tag" taget="_blank" href="/search/%23sqlserver/1.htm">#sqlserver</a><a class="tag" taget="_blank" href="/search/sqlserver/1.htm">sqlserver</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/sqlServer%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">sqlServer学习笔记</a>
                        <div>SqlServer基础学习笔记介绍了SQLServer数据库管理系统的基础知识,包括数据库的创建、表的设计、SQL查询语句、数据类型、索引、以及常见的管理任务等内容,适合初学者入门学习。第一章:SQLServer简介1.1SQLServer概述SQLServer是由Microsoft公司开发的关系型数据库管理系统,用于存储和管理大量数据。它提供了可靠性、安全性和高性能的数据库解决方案,广泛应用于企</div>
                    </li>
                    <li><a href="/article/1939074478055157760.htm"
                           title="linux nvidia-smi失败(已测有效)" target="_blank">linux nvidia-smi失败(已测有效)</a>
                        <span class="text-muted">Summer_Anny</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>ref:https://worktile.com/kb/ask/345201.html当在Linux终端中无法找到nvidia命令时,可能有以下几种原因:Nvidia驱动未安装:首先,要使用nvidia命令,需要在系统上安装Nvidia驱动程序。您可以通过以下步骤来安装驱动:a.检查系统上是否已经安装了Nvidia显卡。可以运行以下命令来检查:“lspci|grep-invidia“b.如果未安装</div>
                    </li>
                    <li><a href="/article/1939073088675180544.htm"
                           title="嵌入式笔记:常用接口之详解I2C总线" target="_blank">嵌入式笔记:常用接口之详解I2C总线</a>
                        <span class="text-muted">失落的多巴胺</span>
<a class="tag" taget="_blank" href="/search/STM32/1.htm">STM32</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a>
                        <div>I2C(Inter-IntegratedCircuit)1.简介I2C(也称为IIC)是一种同步、多主、低速的串行通信协议,只需要两根线即可实现设备之间的数据传输,广泛应用于各种嵌入式设备中,这点在下文原理部分会进一步介绍。2.原理与特性1.双线通信I2C总线由两根信号线组成:SCL:即时钟线,由主设备(Master)产生时钟信号,用于同步数据传输。SDA:即数据线,用于主设备与从设备(Slave</div>
                    </li>
                    <li><a href="/article/1939068551184838656.htm"
                           title="WPF 几种绑定 (笔记)" target="_blank">WPF 几种绑定 (笔记)</a>
                        <span class="text-muted">菜长江</span>
<a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a>
                        <div>资源与绑定DataContext(绑定到我们定义的属性)xmlns:local="clr-namespace:模板"以上仅仅是代表放了一个"ViewModel字典"完整引用是"模板\MyViewModel\SharedViewModel"然后并没有去使用它然后要想使用它就得通过指定"Source="{StaticResourceSharedViewModel}"这样就表示Grid绑定上下文对象是我</div>
                    </li>
                    <li><a href="/article/1939064643863506944.htm"
                           title="嵌入式环境下的C++最佳实践" target="_blank">嵌入式环境下的C++最佳实践</a>
                        <span class="text-muted">is0815</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>目标:学习嵌入式环境下的C++最佳实践内存管理优化:避免动态分配为什么避免动态分配?堆内存分配(如malloc,new)开销大,速度慢。堆内存容易导致碎片化,增加内存压力。动态分配增加内存泄漏、使用后未释放等风险。实时、高性能系统(嵌入式、游戏引擎)尤其需要优化内存管理。栈vs堆的性能对比特性栈(stack)堆(heap)分配/释放速度极快(O(1))较慢(需管理分配表,O(logn)或更慢)生命</div>
                    </li>
                    <li><a href="/article/1939064644345851904.htm"
                           title="简说 MISRA-C++" target="_blank">简说 MISRA-C++</a>
                        <span class="text-muted">is0815</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>MISRA-C++是嵌入式系统中广泛采用的C++编码规范,旨在提高代码安全性、可靠性和可维护性。以下是MISRA-C++的详细要求,涵盖核心规则分类、禁用特性及最佳实践:一、核心规则分类1.语言使用限制禁用动态内存分配(new/delete、std::malloc)风险:内存碎片、分配失败导致运行时崩溃替代:静态数组、对象池或定制内存分配器禁用异常处理(try/catch/throw)风险:异常展</div>
                    </li>
                    <li><a href="/article/1939064389877428224.htm"
                           title="Linux-笔记 设备树插件" target="_blank">Linux-笔记 设备树插件</a>
                        <span class="text-muted">FU.l</span>
<a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a>
                        <div>目录前言:设备树插件的书写规范:设备树插件的编译:内核配置:应用背景:举例:前言:设备树插件(DeviceTreeBlobOverlay,简称DTBO)是Linux内核和嵌入式系统中用于动态修改或扩展系统运行时的设备树配置的一种机制。它是对传统设备(DeviceTreeSource,简称DTS)的补充,允许在不重新编译整个内核的情况下,对硬件配置进行更改。本质也是个设备树文件。设备树插件的书写规范</div>
                    </li>
                    <li><a href="/article/1939055190023925760.htm"
                           title="MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口" target="_blank">MocapApi 中文文档 和github下载地址 NeuronDataReader(以下简称 NDR)的下一代编程接口</a>
                        <span class="text-muted">zhangfeng1133</span>
<a class="tag" taget="_blank" href="/search/github/1.htm">github</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E5%8F%B7%E5%A4%84%E7%90%86/1.htm">信号处理</a>
                        <div>以下是MocapApi技术文档githubhttps://github.com/pnmocap/MocapApi?tab=readme-ov-file国内可以查找getcode英文文档https://mocap-api.noitom.com/mocap_api_en.html概述MocapApi是NeuronDataReader(以下简称NDR)的下一代编程接口,设计目标为:跨平台兼容(Win/M</div>
                    </li>
                    <li><a href="/article/1939053802078400512.htm"
                           title="PAT A1052 Linked List Sorting C++ 主要的坑" target="_blank">PAT A1052 Linked List Sorting C++ 主要的坑</a>
                        <span class="text-muted">sisi-mia</span>
<a class="tag" taget="_blank" href="/search/PAT/1.htm">PAT</a><a class="tag" taget="_blank" href="/search/%E7%94%B2%E7%BA%A7/1.htm">甲级</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/pat%E8%80%83%E8%AF%95/1.htm">pat考试</a>
                        <div>Alinkedlistconsistsofaseriesofstructures,whicharenotnecessarilyadjacentinmemory.WeassumethateachstructurecontainsanintegerkeyandaNextpointertothenextstructure.Nowgivenalinkedlist,youaresupposedtosortt</div>
                    </li>
                    <li><a href="/article/1939045354578178048.htm"
                           title="Java web%10" target="_blank">Java web%10</a>
                        <span class="text-muted">好学且牛逼的马</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/AI%E7%BC%96%E7%A8%8B/1.htm">AI编程</a>
                        <div>%10新路线Javawebai笔记阶段时长内容Web前端基础2天HTML、CSS、JS、Vue3、AjaxWeb后端基础4天Maven、HTTP协议、SpringIOC、DI、MySQL、JDBC、MybatisWeb后端实战6天Tlias案例(基于案例讲解web开发的核心知识)Web后端进阶2天SpringAOP、SpringBoot原理、自定义Starter、Maven高级前端web实战4天V</div>
                    </li>
                    <li><a href="/article/1939042579781840896.htm"
                           title="Java 集合list 手搓底层源码" target="_blank">Java 集合list 手搓底层源码</a>
                        <span class="text-muted">好学且牛逼的马</span>
<a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>#32Java八股集合基础用法掌握速通小林不是很全老韩详细底层byd课程质量一般八股文听书算法题不会写byd密码的还没开始看双指针技巧秒杀七道链表题目|labuladong的算法笔记等等熬夜看笔记实现底层代码后面非常长但是也只写到了list完map和set明天写collection这段代码展示了Java集合框架的核心接口层次结构。`Collection`是整个集合框架的根接口,定义了集合操作的基本</div>
                    </li>
                    <li><a href="/article/1939040562640384000.htm"
                           title="VSCode更改程序编译之后生成文件的保存路径" target="_blank">VSCode更改程序编译之后生成文件的保存路径</a>
                        <span class="text-muted">一low永逸</span>
<a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85IDE/1.htm">安装IDE</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a>
                        <div>目录目标过程如何生成json代码其他参考目标想把程序文件和生成文件分开来,生成在当前文件的out文件夹过程在保存代码的文件夹下面再建一个保存生成文件的文件夹,我生成了out文件夹打开.vscode文件夹下面settings.json文件(这个json文件可以自己生成或复制过来,不影响使用)在settings.json中加入以下代码,我主要使用C++语言,所以只改这个,不同系统的shell语法不一样</div>
                    </li>
                    <li><a href="/article/1939033244494262272.htm"
                           title="浅谈Qt和C++的关系" target="_blank">浅谈Qt和C++的关系</a>
                        <span class="text-muted">Terrarily</span>
<a class="tag" taget="_blank" href="/search/qt5/1.htm">qt5</a><a class="tag" taget="_blank" href="/search/qt/1.htm">qt</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>Qt和C++Qt是QML和JavaScript的C++扩展功能工具包,并且Qt是由C++开发的,所以C++贯穿了整个Qt的项目。我会着重从c++的角度来介绍Qt。从C++的角度分析Qt,然后你会发现Qt通过内省数据的机制实现了许多现代语言的特性。这个是通过Qt的基础类QObject来实现的。Qt使用源对象信息实现了信号和槽的回调绑定。每个信号都能绑定任意数量的槽函数或者其他的信号。当一个信号弄一个</div>
                    </li>
                    <li><a href="/article/1939032362482462720.htm"
                           title="C++使用大小括号初始化变量" target="_blank">C++使用大小括号初始化变量</a>
                        <span class="text-muted">空名Noname</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>转自个人博客本文对普通变量、普通类对象在初始化时使用()和{}的情况进行区分说明,以免混淆不清。一般使用()是使用构造函数初始化,使用{}是使用列表初始化,如下。1.基本初始化(略过)这里大概对基本初始化方式做一个归纳1.1默认初始化即只声明,让其调用默认构造函数。对于基本变量类型(如int、double…),只声明就不会定义具体的初始值。对于类对象,就会调用可以不用填参数的默认构造函数,如果没有</div>
                    </li>
                    <li><a href="/article/1939028707142332416.htm"
                           title="C++学习笔记.2" target="_blank">C++学习笔记.2</a>
                        <span class="text-muted">Lowjin_</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>类和对象封装语法:class关键字{访问权限属性行为}#includeusingnamespacestd;constdoublepi=3.14;//设计一个圆类classcircle{//访问权限//公共权限public://属性intr;//行为doublec(){return2*pi*r;}};intmain(){//通过圆类创建具体的圆(对象)circlec1;c1.r=10;cout#in</div>
                    </li>
                    <li><a href="/article/1939028579773902848.htm"
                           title="【SQL学习笔记4】case when 和if的用法" target="_blank">【SQL学习笔记4】case when 和if的用法</a>
                        <span class="text-muted">你一定能成为你想要成为的人</span>
<a class="tag" taget="_blank" href="/search/SQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">SQL学习笔记</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>1.case用法--用法一:casewhen条件1then字段取值1when条件2then字段取值2when条件3then字段取值3else字段取值4--如果上述全部不满足,则执行end--用法二:case字段名when取值1then字段取值1when取值2then字段取值2when取值3then字段取值3else字段取值4--如果上述全部不满足,则执行end2.if用法if(条件,取值1,取值2</div>
                    </li>
                    <li><a href="/article/1939024676319719424.htm"
                           title="创建没有 TPM 和安全启动的 Windows 11 可启动 USB 驱动器" target="_blank">创建没有 TPM 和安全启动的 Windows 11 可启动 USB 驱动器</a>
                        <span class="text-muted"></span>

                        <div>创建没有TPM和安全启动的Windows11可启动USB驱动器如果你使用的笔记本电脑或台式机系统不符合Windows11的系统要求,即没有安全启动和TPM2.0;那么这里有一个解决方案,可以创建一个Windows11的可启动USB驱动器,但会移除TPM和安全启动的要求。微软对安装Win11的用户设定了某些限制,这些用户使用的计算机没有TPM和安全启动功能。不过,既然凡事都有解决办法,这个问题也不例</div>
                    </li>
                    <li><a href="/article/1939022783023476736.htm"
                           title="Python个人学习基础笔记-3.爬虫(1)" target="_blank">Python个人学习基础笔记-3.爬虫(1)</a>
                        <span class="text-muted">孜宸润泽</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a>
                        <div>一.爬虫的定义爬虫(crawler/spider)是模拟浏览器行为,按照编写规则,自动接收网页信息的工具。通常而言爬虫首先从初始URL集选择URL,向目标网页发起请求,获取网页的HTML源码,然后将获取的数据进行解析过滤,保存我们所需要的标题、内容等,最后提取新的URL加入待爬序列。爬虫常见所需要的库包括Request库、BeautifulSoup4库、Scrapy库和Selenium库等。二.R</div>
                    </li>
                    <li><a href="/article/1939022656699428864.htm"
                           title="Maven Javadoc 插件使用详解" target="_blank">Maven Javadoc 插件使用详解</a>
                        <span class="text-muted">BillKu</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>MavenJavadoc插件使用详解maven-javadoc-plugin是Maven项目中用于生成JavaAPI文档的标准插件,它封装了JDK的javadoc工具,提供了更便捷的配置和集成方式。一、基本使用1.快速生成Javadoc在项目根目录执行以下命令:bash复制下载mvnjavadoc:javadoc生成的文档位于:target/site/apidocs/index.html2.完整生</div>
                    </li>
                    <li><a href="/article/1939022404441403392.htm"
                           title="和李沐老师学深度学习--2.数据操作部分代码实现(学习笔记)" target="_blank">和李沐老师学深度学习--2.数据操作部分代码实现(学习笔记)</a>
                        <span class="text-muted"></span>

                        <div>大家对代码有不懂地方都可以上网去查找,最好是有一定的数据分析基础比较容易理解,李沐老师课程视频链接我放在这里了大家有不懂都可以观看课程进行学习04数据操作+数据预处理【动手学深度学习v2】_哔哩哔哩_bilibili深度学习课程电子书:大家可以使用翻译插件观看书的内容Preface—DiveintoDeepLearning1.0.3documentation深度学习github项目:https:/</div>
                    </li>
                    <li><a href="/article/1939020765135433728.htm"
                           title="一文教你学会使用 ts 泛型;ts 泛型常用知识点" target="_blank">一文教你学会使用 ts 泛型;ts 泛型常用知识点</a>
                        <span class="text-muted">GGhhccc</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a>
                        <div>文章目录1.泛型是什么?为什么要用泛型?2.泛型如何使用泛型类泛型约束3.泛型部分实用工具类型ExcludeExtractOmitPick4.结语最近回头复习了一下ts泛型的知识,做一些笔记的总结分享~1.泛型是什么?为什么要用泛型?引用官网的例子,此时有一个需求:我们要定义一个函数,他会返回任何传入他的值。这个情况下,我们如果已知他的数据类型(假定是number),就可以写出以下代码:funct</div>
                    </li>
                    <li><a href="/article/1939020512403451904.htm"
                           title="ts学习笔记七:泛型" target="_blank">ts学习笔记七:泛型</a>
                        <span class="text-muted"></span>

                        <div>//泛型的用处在于当我们调用的时候确定类型,而不是一开始就写好类型,类型不确定,只有在执行的时候才能确定//1.单个泛型声明的时候需要用(times:number,value:T):Array{//根据对应参数的类型给T赋值//letresult=[];//for(leti=0;i{//[key:number]:T//}//interfaceICreateArray{//interface后面的类</div>
                    </li>
                    <li><a href="/article/1939018873235894272.htm"
                           title="TS中的泛型 (学习笔记)" target="_blank">TS中的泛型 (学习笔记)</a>
                        <span class="text-muted">小码龙~</span>
<a class="tag" taget="_blank" href="/search/TS/1.htm">TS</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a>
                        <div>文章目录前言一、泛型是什么?二、泛型的分类三、泛型的基本使用3.1函数中的泛型使用3.2接口中的泛型使用(运用广泛)3.2类型别名中的泛型使用(运用广泛)3.2类中的泛型使用总结前言泛型的基本使用一、泛型是什么?泛型(Generics)是指在定义函数、接⼝或类的时候,不预先指定具体的类型,⽽在使⽤的时候再指定类型的⼀种特性,简单来说泛型其实就是类型参数,在定义的时候定义形参(类型变量),使⽤的时候</div>
                    </li>
                    <li><a href="/article/1939018620042539008.htm"
                           title="TS 函数泛型和泛型约束" target="_blank">TS 函数泛型和泛型约束</a>
                        <span class="text-muted">邱志刚</span>
<a class="tag" taget="_blank" href="/search/TS/1.htm">TS</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>仅供参考,自己学习记笔记。//函数泛型functionAdd(a:T,b:T):Array{return[a,b]}Add(1,2);Add('1','2');//多个泛型functionSub(a:T,b:B):Array{return[a,b]}Sub(1,'aa')//泛型约束interfaceLen{length:Number}functiongetLength(arg:T){return</div>
                    </li>
                    <li><a href="/article/1939017864501587968.htm"
                           title="ts学习笔记" target="_blank">ts学习笔记</a>
                        <span class="text-muted">瑾清在努力</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a>
                        <div>1.介绍ts是js的超集,他融合了其他语言的优势,将js带到了一个新的高度js,es,ts的关系:ECMAScript是JavaScript的标准,TypeScript是JavaScript的超集2.为什么使用ts?1.发现问题js---运行后报错ts---运行之前可检查出错误(静态类型检查)2.非异常故障错别字,未调用函数,基本逻辑错误constuser={name:'小明',age:26}us</div>
                    </li>
                                <li><a href="/article/72.htm"
                                       title="Java开发中,spring mvc 的线程怎么调用?" target="_blank">Java开发中,spring mvc 的线程怎么调用?</a>
                                    <span class="text-muted">小麦麦子</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a>
                                    <div>今天逛知乎,看到最近很多人都在问spring mvc 的线程http://www.maiziedu.com/course/java/ 的启动问题,觉得挺有意思的,那哥们儿问的也听仔细,下面的回答也很详尽,分享出来,希望遇对遇到类似问题的Java开发程序猿有所帮助。 
 
问题: 
    在用spring mvc架构的网站上,设一线程在虚拟机启动时运行,线程里有一全局</div>
                                </li>
                                <li><a href="/article/199.htm"
                                       title="maven依赖范围" target="_blank">maven依赖范围</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>1.test 测试的时候才会依赖,编译和打包不依赖,如junit不被打包 
 
2.compile 只有编译和打包时才会依赖 
 
3.provided 编译和测试的时候依赖,打包不依赖,如:tomcat的一些公用jar包 
 
4.runtime 运行时依赖,编译不依赖 
 
5.默认compile 
 
依赖范围compile是支持传递的,test不支持传递 
 
1.传递的意思是项目A,引用</div>
                                </li>
                                <li><a href="/article/326.htm"
                                       title="Jaxb org.xml.sax.saxparseexception : premature end of file" target="_blank">Jaxb org.xml.sax.saxparseexception : premature end of file</a>
                                    <span class="text-muted">darrenzhu</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/premature/1.htm">premature</a><a class="tag" taget="_blank" href="/search/JAXB/1.htm">JAXB</a>
                                    <div>如果在使用JAXB把xml文件unmarshal成vo(XSD自动生成的vo)时碰到如下错误: 
org.xml.sax.saxparseexception : premature end of file 
很有可能时你直接读取文件为inputstream,然后将inputstream作为构建unmarshal需要的source参数。InputSource inputSource = new In</div>
                                </li>
                                <li><a href="/article/453.htm"
                                       title="CSS Specificity" target="_blank">CSS Specificity</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E6%9D%83%E9%87%8D/1.htm">权重</a><a class="tag" taget="_blank" href="/search/Specificity/1.htm">Specificity</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>  
有时候对于页面元素设置了样式,可为什么页面的显示没有匹配上呢? because specificity   
CSS 的选择符是有权重的,当不同的选择符的样式设置有冲突时,浏览器会采用权重高的选择符设置的样式。   
    规则: 
  
  HTML标签的权重是1

  Class 的权重是10

  Id 的权重是100

</div>
                                </li>
                                <li><a href="/article/580.htm"
                                       title="java与servlet" target="_blank">java与servlet</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a>
                                    <div>servlet 搞java web开发的人一定不会陌生,而且大家还会时常用到它。 
下面是java官方网站上对servlet的介绍:  java官网对于servlet的解释 写道   
Java Servlet Technology Overview Servlets are the Java platform technology of choice for extending and enha</div>
                                </li>
                                <li><a href="/article/707.htm"
                                       title="eclipse中安装maven插件" target="_blank">eclipse中安装maven插件</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a>
                                    <div>1.首先去官网下载 Maven: 
http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.2.3-bin.tar.gz 
下载完成之后将其解压, 
我将解压后的文件夹:apache-maven-3.2.3, 
并将它放在 D:\tools目录下, 
即 maven 最终的路径是:D:\tools\apache-mave</div>
                                </li>
                                <li><a href="/article/834.htm"
                                       title="jpa@OneToOne关联关系" target="_blank">jpa@OneToOne关联关系</a>
                                    <span class="text-muted">布衣凌宇</span>
<a class="tag" taget="_blank" href="/search/jpa/1.htm">jpa</a>
                                    <div>Nruser里的pruserid关联到Pruser的主键id,实现对一个表的增删改,另一个表的数据随之增删改。 
Nruser实体类 
//***************************************************************** 
@Entity 
@Table(name="nruser") 
@DynamicInsert @Dynam</div>
                                </li>
                                <li><a href="/article/961.htm"
                                       title="我的spring学习笔记11-Spring中关于声明式事务的配置" target="_blank">我的spring学习笔记11-Spring中关于声明式事务的配置</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a><a class="tag" taget="_blank" href="/search/%E9%85%8D%E7%BD%AE/1.htm">配置</a>
                                    <div>这两天学到事务管理这一块,结合到之前的terasoluna框架,觉得书本上讲的还是简单阿。我就把我从书本上学到的再结合实际的项目以及网上看到的一些内容,对声明式事务管理做个整理吧。我看得Spring in Action第二版中只提到了用TransactionProxyFactoryBean和<tx:advice/>,定义注释驱动这三种,我承认后两种的内容很好,很强大。但是实际的项目当中</div>
                                </li>
                                <li><a href="/article/1088.htm"
                                       title="java 动态代理简单实现" target="_blank">java 动态代理简单实现</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/handler/1.htm">handler</a><a class="tag" taget="_blank" href="/search/proxy/1.htm">proxy</a><a class="tag" taget="_blank" href="/search/dynamic/1.htm">dynamic</a><a class="tag" taget="_blank" href="/search/service/1.htm">service</a>
                                    <div>dynamicproxy.service.HelloService 
package dynamicproxy.service;

public interface HelloService {
	public void sayHello();
}
 
  
dynamicproxy.service.impl.HelloServiceImpl 
package dynamicp</div>
                                </li>
                                <li><a href="/article/1215.htm"
                                       title="JDBC连接数据库" target="_blank">JDBC连接数据库</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/JDBC%E7%BC%96%E7%A8%8B/1.htm">JDBC编程</a><a class="tag" taget="_blank" href="/search/JAVA%E6%93%8D%E4%BD%9Coracle%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">JAVA操作oracle数据库</a>
                                    <div>      
    如果我们要想连接oracle公司的数据库,就要首先下载oralce公司的驱动程序,将这个驱动程序的jar包导入到我们工程中; 
  
JDBC链接数据库的代码和固定写法; 
  
  
1,加载oracle数据库的驱动; 
    &nb</div>
                                </li>
                                <li><a href="/article/1342.htm"
                                       title="单例模式中的多线程分析" target="_blank">单例模式中的多线程分析</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>谈到单例模式,我们立马会想到饿汉式和懒汉式加载,所谓饿汉式就是在创建类时就创建好了实例,懒汉式在获取实例时才去创建实例,即延迟加载。 
饿汉式: 
package com.bijian.study;

public class Singleton {

	private Singleton() {
	}

	// 注意这是private 只供内部调用
	private static</div>
                                </li>
                                <li><a href="/article/1469.htm"
                                       title="javascript读取和修改原型特别需要注意原型的读写不具有对等性" target="_blank">javascript读取和修改原型特别需要注意原型的读写不具有对等性</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/prototype/1.htm">prototype</a>
                                    <div>        对于从原型对象继承而来的成员,其读和写具有内在的不对等性。比如有一个对象A,假设它的原型对象是B,B的原型对象是null。如果我们需要读取A对象的name属性值,那么JS会优先在A中查找,如果找到了name属性那么就返回;如果A中没有name属性,那么就到原型B中查找name,如果找到了就返回;如果原型B中也没有</div>
                                </li>
                                <li><a href="/article/1596.htm"
                                       title="【持久化框架MyBatis3六】MyBatis3集成第三方DataSource" target="_blank">【持久化框架MyBatis3六】MyBatis3集成第三方DataSource</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/dataSource/1.htm">dataSource</a>
                                    <div>MyBatis内置了数据源的支持,如: 
  
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<data</div>
                                </li>
                                <li><a href="/article/1723.htm"
                                       title="我程序中用到的urldecode和base64decode,MD5" target="_blank">我程序中用到的urldecode和base64decode,MD5</a>
                                    <span class="text-muted">bitcarter</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/MD5/1.htm">MD5</a><a class="tag" taget="_blank" href="/search/base64decode/1.htm">base64decode</a><a class="tag" taget="_blank" href="/search/urldecode/1.htm">urldecode</a>
                                    <div>这里是base64decode和urldecode,Md5在附件中。因为我是在后台所以需要解码: 
 

string Base64Decode(const char* Data,int DataByte,int& OutByte)
{
    //解码表
    const char DecodeTable[] =
    {
        0, 0, 0, 0, 0, 0</div>
                                </li>
                                <li><a href="/article/1850.htm"
                                       title="腾讯资深运维专家周小军:QQ与微信架构的惊天秘密" target="_blank">腾讯资深运维专家周小军:QQ与微信架构的惊天秘密</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>社交领域一直是互联网创业的大热门,从PC到移动端,从OICQ、MSN到QQ。到了移动互联网时代,社交领域应用开始彻底爆发,直奔黄金期。腾讯在过去几年里,社交平台更是火到爆,QQ和微信坐拥几亿的粉丝,QQ空间和朋友圈各种刷屏,写心得,晒照片,秀视频,那么谁来为企鹅保驾护航呢?支撑QQ和微信海量数据背后的架构又有哪些惊天内幕呢?本期大讲堂的内容来自今年2月份ChinaUnix对腾讯社交网络运营服务中心</div>
                                </li>
                                <li><a href="/article/1977.htm"
                                       title="java-69-旋转数组的最小元素。把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素" target="_blank">java-69-旋转数组的最小元素。把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>

public class MinOfShiftedArray {

	/**
	 * Q69 旋转数组的最小元素
	 * 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
	 * 例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
	 */
	publ</div>
                                </li>
                                <li><a href="/article/2104.htm"
                                       title="看博客,应该是有方向的" target="_blank">看博客,应该是有方向的</a>
                                    <span class="text-muted">Cb123456</span>
<a class="tag" taget="_blank" href="/search/%E5%8F%8D%E7%9C%81/1.htm">反省</a><a class="tag" taget="_blank" href="/search/%E7%9C%8B%E5%8D%9A%E5%AE%A2/1.htm">看博客</a>
                                    <div>看博客,应该是有方向的: 
 我现在就复习以前的,在补补以前不会的,现在还不会的,同时完善完善项目,也看看别人的博客. 
 我刚突然想到的: 
 1.应该看计算机组成原理,数据结构,一些算法,还有关于android,java的。 
 2.对于我,也快大四了,看一些职业规划的,以及一些学习的经验,看看别人的工作总结的. 
  
 为什么要写</div>
                                </li>
                                <li><a href="/article/2231.htm"
                                       title="[开源与商业]做开源项目的人生活上一定要朴素,尽量减少对官方和商业体系的依赖" target="_blank">[开源与商业]做开源项目的人生活上一定要朴素,尽量减少对官方和商业体系的依赖</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/1.htm">开源项目</a>
                                    <div> 
 
     为什么这样说呢?  因为科学和技术的发展有时候需要一个平缓和长期的积累过程,但是行政和商业体系本身充满各种不稳定性和不确定性,如果你希望长期从事某个科研项目,但是却又必须依赖于某种行政和商业体系,那其中的过程必定充满各种风险。。。 
 
      所以,为避免这种不确定性风险,我</div>
                                </li>
                                <li><a href="/article/2358.htm"
                                       title="一个 sql优化 ([精华] 一个查询优化的分析调整全过程!很值得一看 )" target="_blank">一个 sql优化 ([精华] 一个查询优化的分析调整全过程!很值得一看 )</a>
                                    <span class="text-muted">cwqcwqmax9</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a>
                                    <div>见   http://www.itpub.net/forum.php?mod=viewthread&tid=239011 
 
 
 
 
Web翻页优化实例 
 提交时间: 2004-6-18 15:37:49      回复    发消息  
 
 
环境: 
Linux ve</div>
                                </li>
                                <li><a href="/article/2485.htm"
                                       title="Hibernat and Ibatis" target="_blank">Hibernat and Ibatis</a>
                                    <span class="text-muted">dashuaifu</span>
<a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a><a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>Hibernate  VS  iBATIS 简介 Hibernate 是当前最流行的O/R mapping框架,当前版本是3.05。它出身于sf.net,现在已经成为Jboss的一部分了 iBATIS 是另外一种优秀的O/R mapping框架,当前版本是2.0。目前属于apache的一个子项目了。 相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mappi</div>
                                </li>
                                <li><a href="/article/2612.htm"
                                       title="备份MYSQL脚本" target="_blank">备份MYSQL脚本</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>#!/bin/sh
# this shell to backup mysql
#1413161683@qq.com (QQ:1413161683 DuChengJiu)

_dbDir=/var/lib/mysql/
_today=`date +%w`
_bakDir=/usr/backup/$_today
[ ! -d $_bakDir ] && mkdir -p </div>
                                </li>
                                <li><a href="/article/2739.htm"
                                       title="iOS第三方开源库的吐槽和备忘" target="_blank">iOS第三方开源库的吐槽和备忘</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                                    <div>转自 
ibireme的博客       做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽。       目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code、SourceForge等地方。由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库。       首先整理了一份 
Github上排名靠</div>
                                </li>
                                <li><a href="/article/2866.htm"
                                       title="html wlwmanifest.xml" target="_blank">html wlwmanifest.xml</a>
                                    <span class="text-muted">eoems</span>
<a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>所谓优化wp_head()就是把从wp_head中移除不需要元素,同时也可以加快速度。 
 
步骤: 
 
加入到function.php 
 
remove_action('wp_head', 'wp_generator'); 
//wp-generator移除wordpress的版本号,本身blog的版本号没什么意义,但是如果让恶意玩家看到,可能会用官网公布的漏洞攻击blog 
 
remov</div>
                                </li>
                                <li><a href="/article/2993.htm"
                                       title="浅谈Java定时器发展" target="_blank">浅谈Java定时器发展</a>
                                    <span class="text-muted">hacksin</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91/1.htm">并发</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a><a class="tag" taget="_blank" href="/search/%E5%AE%9A%E6%97%B6%E5%99%A8/1.htm">定时器</a>
                                    <div>java在jdk1.3中推出了定时器类Timer,而后在jdk1.5后由Dou Lea从新开发出了支持多线程的ScheduleThreadPoolExecutor,从后者的表现来看,可以考虑完全替代Timer了。 
Timer与ScheduleThreadPoolExecutor对比: 
1. 
  
 Timer始于jdk1.3,其原理是利用一个TimerTask数组当作队列</div>
                                </li>
                                <li><a href="/article/3120.htm"
                                       title="移动端页面侧边导航滑入效果" target="_blank">移动端页面侧边导航滑入效果</a>
                                    <span class="text-muted">ini</span>
<a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/javascirpt/1.htm">javascirpt</a>
                                    <div>效果体验:http://hovertree.com/texiao/mobile/2.htm可以使用移动设备浏览器查看效果。效果使用到jquery-2.1.4.min.js,该版本的jQuery库是用于支持HTML5的浏览器上,不再兼容IE8以前的浏览器,现在移动端浏览器一般都支持HTML5,所以使用该jQuery没问题。HTML文件代码: 
<!DOCTYPE html>
<h</div>
                                </li>
                                <li><a href="/article/3247.htm"
                                       title="AspectJ+Javasist记录日志" target="_blank">AspectJ+Javasist记录日志</a>
                                    <span class="text-muted">kane_xie</span>
<a class="tag" taget="_blank" href="/search/aspectj/1.htm">aspectj</a><a class="tag" taget="_blank" href="/search/javasist/1.htm">javasist</a>
                                    <div>在项目中碰到这样一个需求,对一个服务类的每一个方法,在方法开始和结束的时候分别记录一条日志,内容包括方法名,参数名+参数值以及方法执行的时间。 
  
@Override
public String get(String key) {
//	long start = System.currentTimeMillis();
//	System.out.println("Be</div>
                                </li>
                                <li><a href="/article/3374.htm"
                                       title="redis学习笔记" target="_blank">redis学习笔记</a>
                                    <span class="text-muted">MJC410621</span>
<a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a>
                                    <div>1)nosql数据库主要由以下特点:非关系型的、分布式的、开源的、水平可扩展的。 
1,处理超大量的数据 
2,运行在便宜的PC服务器集群上, 
3,击碎了性能瓶颈。 
1)对数据高并发读写。 
2)对海量数据的高效率存储和访问。 
3)对数据的高扩展性和高可用性。 
 
redis支持的类型: 
 
Sring 类型 
set name lijie 
get name lijie 
set na</div>
                                </li>
                                <li><a href="/article/3501.htm"
                                       title="使用redis实现分布式锁" target="_blank">使用redis实现分布式锁</a>
                                    <span class="text-muted">qifeifei</span>

                                    <div>在多节点的系统中,如何实现分布式锁机制,其中用redis来实现是很好的方法之一,我们先来看一下jedis包中,有个类名BinaryJedis,它有个方法如下: 
  
public Long setnx(final byte[] key, final byte[] value) {
	checkIsInMulti();
	client.setnx(key, value);
	ret</div>
                                </li>
                                <li><a href="/article/3628.htm"
                                       title="BI并非万能,中层业务管理报表要另辟蹊径" target="_blank">BI并非万能,中层业务管理报表要另辟蹊径</a>
                                    <span class="text-muted">张老师的菜</span>
<a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/BI/1.htm">BI</a><a class="tag" taget="_blank" href="/search/%E5%95%86%E4%B8%9A%E6%99%BA%E8%83%BD/1.htm">商业智能</a><a class="tag" taget="_blank" href="/search/%E4%BF%A1%E6%81%AF%E5%8C%96/1.htm">信息化</a>
                                    <div>       BI是商业智能的缩写,是可以帮助企业做出明智的业务经营决策的工具,其数据来源于各个业务系统,如ERP、CRM、SCM、进销存、HER、OA等。 
       BI系统不同于传统的管理信息系统,他号称是一个整体应用的解决方案,是融入管理思想的强大系统:有着系统整体的设计思想,支持对所有</div>
                                </li>
                                <li><a href="/article/3755.htm"
                                       title="安装rvm后出现rvm not a function 或者ruby -v后提示没安装ruby的问题" target="_blank">安装rvm后出现rvm not a function 或者ruby -v后提示没安装ruby的问题</a>
                                    <span class="text-muted">wudixiaotie</span>
<a class="tag" taget="_blank" href="/search/function/1.htm">function</a>
                                    <div>1.在~/.bashrc最后加入 
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 
 2.重新启动terminal输入: 
  
rvm use ruby-2.2.1 --default 
 把当前安装的ruby版本设为默</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>