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/1950232820773351424.htm"
                           title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a>
                        <span class="text-muted">good2know</span>

                        <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div>
                    </li>
                    <li><a href="/article/1950232782412247040.htm"
                           title="日更006 终极训练营day3" target="_blank">日更006 终极训练营day3</a>
                        <span class="text-muted">懒cici</span>

                        <div>人生创业课(2)今天的主题:学习方法一:遇到有用的书,反复读,然后结合自身实际,列践行清单,不要再写读书笔记思考这本书与我有什么关系,我在哪些地方能用到,之后我该怎么用方法二:读完书没映像怎么办?训练你的大脑,方法:每读完一遍书,立马合上书,做一场分享,几分钟都行对自己的学习要求太低,要逼自己方法三:学习深度不够怎么办?找到细分领域的榜样,把他们的文章、书籍、产品都体验一遍,成为他们的超级用户,向</div>
                    </li>
                    <li><a href="/article/1950230678696161280.htm"
                           title="C++ 计数排序、归并排序、快速排序" target="_blank">C++ 计数排序、归并排序、快速排序</a>
                        <span class="text-muted">每天搬一点点砖</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>计数排序:是一种基于哈希的排序算法。他的基本思想是通过统计每个元素的出现次数,然后根据统计结果将元素依次放入排序后的序列中。这种排序算法适用于范围较小的情况,例如整数范围在0到k之间计数排序步骤:1初始化一个长度为最大元素值加1的计数数组,所有元素初始化为02遍历原始数组,将每个元素值作为索引,在计数数组中对应位置加13将数组清空4遍历计数器数组,按照数组中的元素个数放回到元数组中计数排序的优点和</div>
                    </li>
                    <li><a href="/article/1950226770049429504.htm"
                           title="【C++算法】76.优先级队列_前 K 个高频单词" target="_blank">【C++算法】76.优先级队列_前 K 个高频单词</a>
                        <span class="text-muted">流星白龙</span>
<a class="tag" taget="_blank" href="/search/%E4%BC%98%E9%80%89%E7%AE%97%E6%B3%95C%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/%E7%AE%97%E6%B3%95/1.htm">算法</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++算法代码:题目链接:692.前K个高频单词题目描述:解法利用堆来解决TopK问题预处理一下原始的字符串数组,用一个哈希表统计一下每一个单词出现的频次。创建一个大小为k的堆频次:小根堆字典序(频次相同的时候):大根堆循环让元素依次进堆判断提取结果C++算法代码:classSolution{//定义类型别名,PSI表示对typedefpairPSI;//自定义比较</div>
                    </li>
                    <li><a href="/article/1950225381961297920.htm"
                           title="SpringMVC的执行流程" target="_blank">SpringMVC的执行流程</a>
                        <span class="text-muted"></span>

                        <div>1、什么是MVCMVC是一种设计模式。MVC的原理图如下所示M-Model模型(完成业务逻辑:有javaBean构成,service+dao+entity)V-View视图(做界面的展示jsp,html……)C-Controller控制器(接收请求—>调用模型—>根据结果派发页面2、SpringMVC是什么SpringMVC是一个MVC的开源框架,SpringMVC=Struts2+Spring,</div>
                    </li>
                    <li><a href="/article/1950220179610857472.htm"
                           title="【花了N长时间读《过犹不及》,不断练习,可以越通透】" target="_blank">【花了N长时间读《过犹不及》,不断练习,可以越通透】</a>
                        <span class="text-muted">君君Love</span>

                        <div>我已经记不清花了多长时间去读《过犹不及》,读书笔记都写了42页,这算是读得特别精细的了。是一本难得的好书,虽然书中很多内容和圣经吻合,我不是基督徒,却觉得这样的文字值得细细品味,和我们的生活息息相关。我是个界线建立不牢固的人,常常愧疚,常常害怕他人的愤怒,常常不懂拒绝,还有很多时候表达不了自己真实的感受,心里在说不嘴里却在说好……这本书给我很多的启示,让我学会了怎样去建立属于自己的清晰的界限。建立</div>
                    </li>
                    <li><a href="/article/1950218819616174080.htm"
                           title="基于redis的Zset实现作者的轻量级排名" target="_blank">基于redis的Zset实现作者的轻量级排名</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/redis/1.htm">redis</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/%E7%BC%93%E5%AD%98/1.htm">缓存</a>
                        <div>基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的</div>
                    </li>
                    <li><a href="/article/1950216800016855040.htm"
                           title="Effective C++ 条款10:令operator=返回一个reference to *this" target="_blank">Effective C++ 条款10:令operator=返回一个reference to *this</a>
                        <span class="text-muted">君鼎</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>
                        <div>EffectiveC++条款10:令operator=返回一个referenceto*this核心思想:赋值操作符(operator=)应始终返回当前对象的引用(*this),以实现连锁赋值并保持与内置类型一致的语义。⚠️1.问题场景:违反连锁赋值语义classWidget{public:voidoperator=(constWidget&rhs){//错误:返回voidvalue=rhs.val</div>
                    </li>
                    <li><a href="/article/1950216170401492992.htm"
                           title="常规笔记本和加固笔记本的区别" target="_blank">常规笔记本和加固笔记本的区别</a>
                        <span class="text-muted">luchengtech</span>
<a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E9%98%B2%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">三防笔记本</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E8%AE%A1%E7%AE%97%E6%9C%BA/1.htm">加固计算机</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%9B%BA%E7%AC%94%E8%AE%B0%E6%9C%AC/1.htm">加固笔记本</a>
                        <div>在现代科技产品中,笔记本电脑因其便携性和功能性被广泛应用。根据使用场景和需求的不同,笔记本可分为常规笔记本和加固笔记本,二者在多个方面存在显著区别。适用场景是区分二者的重要标志。常规笔记本主要面向普通消费者和办公人群,适用于家庭娱乐、日常办公、学生学习等相对稳定的室内环境。比如,人们在家用它追剧、处理文档,学生在教室用它完成作业。而加固笔记本则专为特殊行业设计,像军事、野外勘探、工业制造、交通运输</div>
                    </li>
                    <li><a href="/article/1950214784112717824.htm"
                           title="C++ :vector的模拟" target="_blank">C++ :vector的模拟</a>
                        <span class="text-muted">诚自然成</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>目录一、vector的迭代器二、vector的构造函数默认构造函数参数构造函数迭代器范围构造函数拷贝构造函数swap:交换vector重载赋值符析构函数reserve:扩容vectorresize:调整大小push_back:添加元素empty:判空pop_back:后删获取大小与容量:size(),capacity()重载operator[]:元素访问insert:插入元素erase:删除一个元</div>
                    </li>
                    <li><a href="/article/1950210374787723264.htm"
                           title="第八课: 写作出版你最关心的出书流程和市场分析(无戒学堂复盘)" target="_blank">第八课: 写作出版你最关心的出书流程和市场分析(无戒学堂复盘)</a>
                        <span class="text-muted">人在陌上</span>

                        <div>今天是周六,恰是圣诞节。推掉了两个需要凑腿的牌局,在一个手机,一个笔记本,一台电脑,一杯热茶的陪伴下,一个人静静地回听无戒学堂的最后一堂课。感谢这一个月,让自己的习惯开始改变,至少,可以静坐一个下午而不觉得乏味枯燥难受了,要为自己点个赞。我深知,这最后一堂课的内容,以我的资质和毅力,可能永远都用不上。但很明显,无戒学堂是用了心的,毕竟,有很多优秀学员,已经具备了写作能力,马上就要用到这堂课的内容。</div>
                    </li>
                    <li><a href="/article/1950208989954371584.htm"
                           title="Selenium 特殊控件操作与 ActionChains 实践详解" target="_blank">Selenium 特殊控件操作与 ActionChains 实践详解</a>
                        <span class="text-muted">小馋喵知识杂货铺</span>
<a class="tag" taget="_blank" href="/search/selenium/1.htm">selenium</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7/1.htm">测试工具</a>
                        <div>1.下拉框单选操作(a)使用SeleniumSelect类(标准HTML标签)Selenium提供了内置的Select类用于操作标准下拉框,这种方式简单且直观。fromselenium.webdriver.support.uiimportSelect#定位下拉框dropdown=Select(driver.find_element("id","dropdown_id"))#通过以下三种方式选择单个</div>
                    </li>
                    <li><a href="/article/1950208107430866944.htm"
                           title="python笔记14介绍几个魔法方法" target="_blank">python笔记14介绍几个魔法方法</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/python/1.htm">python</a>
                        <div>python笔记14介绍几个魔法方法先声明一下各位大佬,这是我的笔记。如有错误,恳请指正。另外,感谢您的观看,谢谢啦!(1).__doc__输出对应的函数,类的说明文档print(print.__doc__)print(value,...,sep='',end='\n',file=sys.stdout,flush=False)Printsthevaluestoastream,ortosys.std</div>
                    </li>
                    <li><a href="/article/1950207097413103616.htm"
                           title="微信公众号回调java_处理微信公众号消息回调" target="_blank">微信公众号回调java_处理微信公众号消息回调</a>
                        <span class="text-muted">weixin_39607620</span>
<a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7%E5%9B%9E%E8%B0%83java/1.htm">微信公众号回调java</a>
                        <div>1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.</div>
                    </li>
                    <li><a href="/article/1950206970766094336.htm"
                           title="C++编程基础与面向对象概念解析" target="_blank">C++编程基础与面向对象概念解析</a>
                        <span class="text-muted">侯昂</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%BC%96%E7%A8%8B/1.htm">面向对象编程</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E8%AF%AD%E6%B3%95/1.htm">C++语法</a><a class="tag" taget="_blank" href="/search/%E5%87%BD%E6%95%B0/1.htm">函数</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E4%B8%8E%E5%AF%B9%E8%B1%A1/1.htm">类与对象</a><a class="tag" taget="_blank" href="/search/%E7%BB%A7%E6%89%BF%E4%B8%8E%E5%A4%9A%E6%80%81%E6%80%A7/1.htm">继承与多态性</a>
                        <div>C++编程基础与面向对象概念解析背景简介C++是一种广泛使用的面向对象编程语言,它允许开发者创建高效、灵活且功能强大的程序。本文基于《C++Primer》一书的章节内容,深入解析C++的核心概念和面向对象编程原则,旨在帮助读者构建扎实的C++编程基础。面向对象编程的原则软件危机与进化介绍了软件危机的产生和软件进化的必要性,强调了面向对象编程(OOP)在应对这些问题中的优势。面向对象编程范式讨论了面</div>
                    </li>
                    <li><a href="/article/1950205034075582464.htm"
                           title="《感官品牌》读书笔记 1" target="_blank">《感官品牌》读书笔记 1</a>
                        <span class="text-muted">西红柿阿达</span>

                        <div>原文:最近我在东京街头闲逛时,与一位女士擦肩而过,我发现她的香水味似曾相识。“哗”的一下,记亿和情感立刻像潮水般涌了出来。这个香水味把我带回了15年前上高中的时候,我的一位亲密好友也是用这款香水。一瞬间,我呆站在那里,东京的街景逐渐淡出,取而代之的是我年少时的丹麦以及喜悦、悲伤、恐惧、困惑的记忆。我被这熟悉的香水味征服了。感想:感官是有记忆的,你所听到,看到,闻到过的有代表性的事件都会在大脑中深深</div>
                    </li>
                    <li><a href="/article/1950203883577995264.htm"
                           title="我不想再当知识的搬运工" target="_blank">我不想再当知识的搬运工</a>
                        <span class="text-muted">楚煜楚尧</span>

                        <div>因为学校课题研究的需要,这个暑假我依然需要完成一本书的阅读笔记。我选的是管建刚老师的《习课堂十讲》。这本书,之前我读过,所以重读的时候,感到很亲切,摘抄起来更是非常得心应手。20页,40面,抄了十天,终于在今天大功告成了。这对之前什么事都要一拖再拖的我来说,是破天荒的改变。我发现至从认识小尘老师以后,我的确发生了很大的改变。遇到必须做却总是犹豫不去做的事,我学会了按照小尘老师说的那样,在心里默默数</div>
                    </li>
                    <li><a href="/article/1950201094361640960.htm"
                           title="人工智能应用研究快讯 2021-11-30" target="_blank">人工智能应用研究快讯 2021-11-30</a>
                        <span class="text-muted">峰谷皆平</span>

                        <div>[HTML]ArtificialIntelligenceforSkinCancerDetection:ScopingReviewATakiddin,JSchneider,YYang,AAbd-Alrazaq...JournalofMedicalInternet...,2021ABSTACT:Background:Skincanceristhemostcommoncancertypeaffectin</div>
                    </li>
                    <li><a href="/article/1950200667587014656.htm"
                           title="学C++的五大惊人好处" target="_blank">学C++的五大惊人好处</a>
                        <span class="text-muted"></span>

                        <div>为什么要学c++学c++有什么用学习c++的好处有1.中考可以加分2.高考可能直接录取3.就业广且工资高4.在未来30--50年c++一定是一个很受欢迎的职业5.c++成功的例子deepsick等AI智能C++语言兼备编程效率和编译运行效率的语言C++语言是C语言功能增强版,在c语言的基础上添加了面向对象编程和泛型编程的支持既继承了C语言高效,简洁,快速和可移植的传统,又具备类似Java、Go等其</div>
                    </li>
                    <li><a href="/article/1950199576451411968.htm"
                           title="20210517坚持分享53天读书摘抄笔记 非暴力沟通——爱自己" target="_blank">20210517坚持分享53天读书摘抄笔记 非暴力沟通——爱自己</a>
                        <span class="text-muted">f79a6556cb19</span>

                        <div>让生命之花绽放在赫布·加德纳(HerbGardner)编写的《一千个小丑》一剧中,主人公拒绝将他12岁的外甥交给儿童福利院。他郑重地说道:“我希望他准确无误地知道他是多么特殊的生命,要不,他在成长的过程中将会忽视这一点。我希望他保持清醒,并看到各种奇妙的可能。我希望他知道,一旦有机会,排除万难给世界一点触动是值得的。我还希望他知道为什么他是一个人,而不是一张椅子。”然而,一旦负面的自我评价使我们看</div>
                    </li>
                    <li><a href="/article/1950196906563006464.htm"
                           title="Unity学习笔记1" target="_blank">Unity学习笔记1</a>
                        <span class="text-muted">zy_777</span>

                        <div>通过一个星期的简单学习,初步了解了下unity,unity的使用,以及场景的布局,UI,以及用C#做一些简单的逻辑。好记性不如烂笔头,一些关键帧还是记起来比较好,哈哈,不然可能转瞬即逝了,(PS:纯小白观点,unity大神可以直接忽略了)一:MonoBehaviour类的初始化1,Instantiate()创建GameObject2,通过Awake()和Start()来做初始化3,Update、L</div>
                    </li>
                    <li><a href="/article/1950195876991397888.htm"
                           title="【Jupyter】个人开发常见命令" target="_blank">【Jupyter】个人开发常见命令</a>
                        <span class="text-muted">TIM老师</span>
<a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Pycharm/1.htm">Pycharm</a><a class="tag" taget="_blank" href="/search/%26amp%3B/1.htm">&</a><a class="tag" taget="_blank" href="/search/VSCode/1.htm">VSCode</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/Jupyter/1.htm">Jupyter</a>
                        <div>1.查看python版本importsysprint(sys.version)2.ipynb/py文件转换jupyternbconvert--topythonmy_file.ipynbipynb转换为mdjupyternbconvert--tomdmy_file.ipynbipynb转为htmljupyternbconvert--tohtmlmy_file.ipynbipython转换为pdfju</div>
                    </li>
                    <li><a href="/article/1950194742100815872.htm"
                           title="用代码生成艺术字:设计个性化海报的秘密" target="_blank">用代码生成艺术字:设计个性化海报的秘密</a>
                        <span class="text-muted"></span>

                        <div>本文围绕“用代码生成艺术字:设计个性化海报的秘密”展开,先概述代码生成艺术字在海报设计中的独特价值,接着介绍常用的代码工具(如HTML、CSS、JavaScript等),详细阐述从构思到实现的完整流程,包括字体样式设计、动态效果添加等,还分享了提升艺术字质感的技巧及实际案例。最后总结代码生成艺术字的优势,为设计师提供打造个性化海报的实用指南,助力提升海报设计的独特性与吸引力,符合搜索引擎SEO标准</div>
                    </li>
                    <li><a href="/article/1950191165710069760.htm"
                           title="前端面试每日 3+1 —— 第39天" target="_blank">前端面试每日 3+1 —— 第39天</a>
                        <span class="text-muted">浪子神剑</span>

                        <div>今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss</div>
                    </li>
                    <li><a href="/article/1950190146074767360.htm"
                           title="大数据技术笔记—spring入门" target="_blank">大数据技术笔记—spring入门</a>
                        <span class="text-muted">卿卿老祖</span>

                        <div>篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据</div>
                    </li>
                    <li><a href="/article/1950187554129113088.htm"
                           title="Django学习笔记(一)" target="_blank">Django学习笔记(一)</a>
                        <span class="text-muted"></span>

                        <div>学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project</div>
                    </li>
                    <li><a href="/article/1950187223672483840.htm"
                           title="GDP经济社会人文民生栅格数据下载网站汇总" target="_blank">GDP经济社会人文民生栅格数据下载网站汇总</a>
                        <span class="text-muted">疯狂学习GIS</span>

                        <div>  本文为“GIS数据获取整理”专栏(https://blog.csdn.net/zhebushibiaoshifu/category_10857546.html)中第八篇独立博客,因此本文全部标题均由“8”开头。本文对目前主要的GDP、社会与经济数据获取网站加以整理与介绍,若需其它GIS领域数据(如遥感影像数据、气象数据、土地土壤数据、农业数据等),大家可以点击上方专栏查看,也可以看这一篇汇总文</div>
                    </li>
                    <li><a href="/article/1950181127176122368.htm"
                           title="C++中std::variant的使用详解和实战代码示例" target="_blank">C++中std::variant的使用详解和实战代码示例</a>
                        <span class="text-muted">点云SLAM</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%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/variant/1.htm">variant</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/1.htm">C++泛型编程</a><a class="tag" taget="_blank" href="/search/%E8%81%94%E5%90%88%E4%BD%93/1.htm">联合体</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E7%B1%BB%E5%9E%8B%E6%93%A6%E9%99%A4%E6%9C%BA%E5%88%B6/1.htm">类型擦除机制</a><a class="tag" taget="_blank" href="/search/C%2B%2B17/1.htm">C++17</a>
                        <div>std::variant是C++17引入的一个类型安全的联合体(type-safeunion),它可以在多个类型之间存储一个值,并在编译时进行类型检查。它是现代C++类型擦除与泛型编程的核心工具之一,适用于构建可变类型结构、消息传递系统、状态机等。一、基本概念#includestd::variantv;类似于联合体union,但类型安全。std::variant只能存储其中一个类型的值。默认构造时</div>
                    </li>
                    <li><a href="/article/1950180497007112192.htm"
                           title="【MySQL】MySQL数据库如何改名" target="_blank">【MySQL】MySQL数据库如何改名</a>
                        <span class="text-muted">武昌库里写JAVA</span>
<a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>MySQL建库授权语句https://www.jianshu.com/p/2237a9649ceeMySQL数据库改名的三种方法https://www.cnblogs.com/gomysql/p/3584881.htmlMySQL安全修改数据库名几种方法https://blog.csdn.net/haiross/article/details/51282417MySQL重命名数据库https://</div>
                    </li>
                    <li><a href="/article/1950179614320029696.htm"
                           title="python学习笔记(汇总)" target="_blank">python学习笔记(汇总)</a>
                        <span class="text-muted">朕的剑还未配妥</span>
<a class="tag" taget="_blank" href="/search/python%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E6%95%B4%E7%90%86/1.htm">python学习笔记整理</a><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/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>文章目录一.基础知识二.python中的数据类型三.运算符四.程序的控制结构五.列表六.字典七.元组八.集合九.字符串十.函数十一.解决bug一.基础知识print函数字符串要加引号,数字可不加引号,如print(123.4)print('小谢')print("洛天依")还可输入表达式,如print(1+3)如果使用三引号,print打印的内容可不在同一行print("line1line2line</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>