import sys
import re
# on Python 3.5
'''
v0.7 Aug. 02, 2018
- conv_sublist() avoids converting C++ comment (e.g. //---)
v0.6 Jun. 22, 2018
- conv_super_pre_notation() handles [vhdl]
- conv_super_pre_notation() handles [verilog]
v0.5 May, 29, 2018
- add conv_tex()
v0.4 Apr. 25, 2018
- add conv_tableFormat()
v0.3 Apr. 25, 2018
- conv_super_pre_notation() takes cpp notation
v0.2 Apr. 25, 2018
- add conv_super_pre_notation()
- add conv_sublist()
v0.1 Apr. 24, 2018
- sub list is converted to Markdown style
'''
def conv_tex(intxt):
if r"[Tex:" in intxt or r"[tex:" in intxt:
wrk = re.sub('\[Tex:', r'```math\r\n', intxt)
wrk = re.sub('\[tex:', r'```math\r\n', wrk)
wrk = re.sub(r']', r'\r\n```', wrk)
return wrk
return intxt
def conv_sublist(astr):
if "//-" in astr: # C++ comment
return astr
if "---" in astr:
astr = astr.replace("---", SPACE4 + SPACE4 + "-")
if "--" in astr:
astr = astr.replace("--", SPACE4 + "-")
return astr
def conv_super_pre_notation(astr):
astr = astr.replace(">||", "```")
astr = astr.replace(">|cpp|", "```cpp")
astr = astr.replace(">|c|", "```c")
astr = astr.replace("||<", "```")
astr = astr.replace(">|verilog|", "```verilog")
astr = astr.replace(">|vhdl|", "```vhdl")
return astr
def getTableFormat(numVertical):
wrk = "|"
for loop in range(numVertical - 1): # -1: except for first
wrk += ":-:|"
return wrk
def conv_tableFormat(astr):
global countTbl
if "|" in astr:
countTbl += 1
if countTbl == 2:
num = astr.count('|')
fmt = getTableFormat(num)
return fmt + "\r\n" + astr
else:
countTbl = 0
return astr
# read from stdin
lines = sys.stdin.readlines()
SPACE4 = " "
countTbl = 0 # Table format counter
for elem in lines:
wrk = conv_sublist(elem)
wrk = conv_super_pre_notation(wrk)
wrk = conv_tableFormat(wrk)
wrk = conv_tex(wrk)
print(wrk, end='')
aW1wb3J0IHN5cwppbXBvcnQgcmUKCiMgb24gUHl0aG9uIDMuNQoKJycnCnYwLjcgQXVnLiAwMiwgMjAxOAogICAtIGNvbnZfc3VibGlzdCgpIGF2b2lkcyBjb252ZXJ0aW5nIEMrKyBjb21tZW50IChlLmcuIC8vLS0tKQp2MC42IEp1bi4gMjIsIDIwMTgKICAgLSBjb252X3N1cGVyX3ByZV9ub3RhdGlvbigpIGhhbmRsZXMgW3ZoZGxdCiAgIC0gY29udl9zdXBlcl9wcmVfbm90YXRpb24oKSBoYW5kbGVzIFt2ZXJpbG9nXQp2MC41IE1heSwgMjksIDIwMTgKICAgLSBhZGQgY29udl90ZXgoKQp2MC40IEFwci4gMjUsIDIwMTgKICAgLSBhZGQgY29udl90YWJsZUZvcm1hdCgpCnYwLjMgQXByLiAyNSwgMjAxOAogICAtIGNvbnZfc3VwZXJfcHJlX25vdGF0aW9uKCkgdGFrZXMgY3BwIG5vdGF0aW9uCnYwLjIgQXByLiAyNSwgMjAxOAogICAtIGFkZCBjb252X3N1cGVyX3ByZV9ub3RhdGlvbigpCiAgIC0gYWRkIGNvbnZfc3VibGlzdCgpCnYwLjEgQXByLiAyNCwgMjAxOAogICAtIHN1YiBsaXN0IGlzIGNvbnZlcnRlZCB0byBNYXJrZG93biBzdHlsZQonJycKCgpkZWYgY29udl90ZXgoaW50eHQpOgogICAgaWYgciJbVGV4OiIgaW4gaW50eHQgb3IgciJbdGV4OiIgaW4gaW50eHQ6CiAgICAgICAgd3JrID0gcmUuc3ViKCdcW1RleDonLCByJ2BgYG1hdGhcclxuJywgaW50eHQpCiAgICAgICAgd3JrID0gcmUuc3ViKCdcW3RleDonLCByJ2BgYG1hdGhcclxuJywgd3JrKQogICAgICAgIHdyayA9IHJlLnN1YihyJ10nLCByJ1xyXG5gYGAnLCB3cmspCiAgICAgICAJcmV0dXJuIHdyawogICAgcmV0dXJuIGludHh0CgoKZGVmIGNvbnZfc3VibGlzdChhc3RyKToKICAgIGlmICIvLy0iIGluIGFzdHI6ICAjIEMrKyBjb21tZW50CiAgICAgICAgcmV0dXJuIGFzdHIKICAgIGlmICItLS0iIGluIGFzdHI6CiAgICAgICAgYXN0ciA9IGFzdHIucmVwbGFjZSgiLS0tIiwgU1BBQ0U0ICsgU1BBQ0U0ICsgIi0iKQogICAgaWYgIi0tIiBpbiBhc3RyOgogICAgICAgIGFzdHIgPSBhc3RyLnJlcGxhY2UoIi0tIiwgU1BBQ0U0ICsgIi0iKQogICAgcmV0dXJuIGFzdHIKCgpkZWYgY29udl9zdXBlcl9wcmVfbm90YXRpb24oYXN0cik6CiAgICBhc3RyID0gYXN0ci5yZXBsYWNlKCI+fHwiLCAiYGBgIikKICAgIGFzdHIgPSBhc3RyLnJlcGxhY2UoIj58Y3BwfCIsICJgYGBjcHAiKQogICAgYXN0ciA9IGFzdHIucmVwbGFjZSgiPnxjfCIsICJgYGBjIikKICAgIGFzdHIgPSBhc3RyLnJlcGxhY2UoInx8PCIsICJgYGAiKQogICAgYXN0ciA9IGFzdHIucmVwbGFjZSgiPnx2ZXJpbG9nfCIsICJgYGB2ZXJpbG9nIikKICAgIGFzdHIgPSBhc3RyLnJlcGxhY2UoIj58dmhkbHwiLCAiYGBgdmhkbCIpCiAgICByZXR1cm4gYXN0cgoKCmRlZiBnZXRUYWJsZUZvcm1hdChudW1WZXJ0aWNhbCk6CiAgICB3cmsgPSAifCIKICAgIGZvciBsb29wIGluIHJhbmdlKG51bVZlcnRpY2FsIC0gMSk6ICAgIyAtMTogZXhjZXB0IGZvciBmaXJzdAogICAgICAgd3JrICs9ICI6LTp8IgogICAgcmV0dXJuIHdyawoKCmRlZiBjb252X3RhYmxlRm9ybWF0KGFzdHIpOgogICAgZ2xvYmFsIGNvdW50VGJsCiAgICBpZiAifCIgaW4gYXN0cjoKICAgICAgICBjb3VudFRibCArPSAxCiAgICAgICAgaWYgY291bnRUYmwgPT0gMjoKICAgICAgICAgICAgbnVtID0gYXN0ci5jb3VudCgnfCcpCiAgICAgICAgICAgIGZtdCA9IGdldFRhYmxlRm9ybWF0KG51bSkKICAgICAgICAgICAgcmV0dXJuIGZtdCArICJcclxuIiArIGFzdHIKICAgIGVsc2U6CiAgICAgICAgY291bnRUYmwgPSAwCiAgICByZXR1cm4gYXN0cgogICAgCiMgcmVhZCBmcm9tIHN0ZGluCmxpbmVzID0gc3lzLnN0ZGluLnJlYWRsaW5lcygpCgpTUEFDRTQgPSAiICAgICIKCmNvdW50VGJsID0gMCAgIyBUYWJsZSBmb3JtYXQgY291bnRlcgpmb3IgZWxlbSBpbiBsaW5lczoKICAgIHdyayA9IGNvbnZfc3VibGlzdChlbGVtKQogICAgd3JrID0gY29udl9zdXBlcl9wcmVfbm90YXRpb24od3JrKQogICAgd3JrID0gY29udl90YWJsZUZvcm1hdCh3cmspCiAgICB3cmsgPSBjb252X3RleCh3cmspCiAgICBwcmludCh3cmssIGVuZD0nJykK
aHR0cDovL3cuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuanAvd2VibG9nLz9wPTM4MDQKCiZndDt8Y3BwfAovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKI2lmbmRlZiBVbml0MUgKI2RlZmluZSBVbml0MUgKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2luY2x1ZGUgJmx0O1N5c3RlbS5DbGFzc2VzLmhwcCZndDsKI2luY2x1ZGUgJmx0O1ZjbC5Db250cm9scy5ocHAmZ3Q7CiNpbmNsdWRlICZsdDtWY2wuU3RkQ3RybHMuaHBwJmd0OwojaW5jbHVkZSAmbHQ7VmNsLkZvcm1zLmhwcCZndDsKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KY2xhc3MgVEZvcm0xIDogcHVibGljIFRGb3JtCnsKX19wdWJsaXNoZWQ6CglUQnV0dG9uICpCdXR0b24xOwoJdm9pZCBfX2Zhc3RjYWxsIEJ1dHRvbjFDbGljayhUT2JqZWN0ICpTZW5kZXIpOwpwcml2YXRlOgoJaW50IHRlc3RDYWxjKGludCB2YWwpOwpwdWJsaWM6CglfX2Zhc3RjYWxsIFRGb3JtMShUQ29tcG9uZW50KiBPd25lcik7Cn07CgpjbGFzcyBUQmF6IHsKcHVibGljOgoJVEJheigpIDogRk9uRnVuYyhOVUxMKSB7fQoJdHlwZWRlZiBpbnQgKF9fY2xvc3VyZSAqUG9pbnRlclRvQUZ1bmN0aW9uKShpbnQpOwoJX19wcm9wZXJ0eSBQb2ludGVyVG9BRnVuY3Rpb24gT25GdW5jID0geyByZWFkPUZPbkZ1bmMsIHdyaXRlPUZPbkZ1bmMgfTsKCWludCBGdW5jKGludCBBcmcpIHsKCQlpZiAoRk9uRnVuYykgewoJCQlyZXR1cm4gRk9uRnVuYyhBcmcpOwoJCX0KCQlyZXR1cm4gMDsKCX0KcHJpdmF0ZToKCVBvaW50ZXJUb0FGdW5jdGlvbiBGT25GdW5jOwp9OwoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZXh0ZXJuIFBBQ0tBR0UgVEZvcm0xICpGb3JtMTsKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI2VuZGlmCnx8Jmx0OwoKCiZndDt8Y3BwfAovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojaW5jbHVkZSAmbHQ7dmNsLmgmZ3Q7CiNwcmFnbWEgaGRyc3RvcAoKI2luY2x1ZGUgJnF1b3Q7VW5pdDEuaCZxdW90OwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojcHJhZ21hIHBhY2thZ2Uoc21hcnRfaW5pdCkKI3ByYWdtYSByZXNvdXJjZSAmcXVvdDsqLmRmbSZxdW90OwpURm9ybTEgKkZvcm0xOwovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpfX2Zhc3RjYWxsIFRGb3JtMTo6VEZvcm0xKFRDb21wb25lbnQqIE93bmVyKQoJOiBURm9ybShPd25lcikKewp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnZvaWQgX19mYXN0Y2FsbCBURm9ybTE6OkJ1dHRvbjFDbGljayhUT2JqZWN0ICpTZW5kZXIpCnsKCVRCYXogdGJhejsKCgl0YmF6Lk9uRnVuYyA9IHRlc3RDYWxjOwoKCXRiYXouRnVuYygyMCk7Cgp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludCBURm9ybTE6OnRlc3RDYWxjKGludCB2YWwpCnsKCVNob3dNZXNzYWdlKEludFRvU3RyKHZhbCkpOwp9Ci8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnx8Jmx0Ow==
http://w...content-available-to-author-only...e.jp/weblog/?p=3804
>|cpp|
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private:
int testCalc(int val);
public:
__fastcall TForm1(TComponent* Owner);
};
class TBaz {
public:
TBaz() : FOnFunc(NULL) {}
typedef int (__closure *PointerToAFunction)(int);
__property PointerToAFunction OnFunc = { read=FOnFunc, write=FOnFunc };
int Func(int Arg) {
if (FOnFunc) {
return FOnFunc(Arg);
}
return 0;
}
private:
PointerToAFunction FOnFunc;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
||<
>|cpp|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TBaz tbaz;
tbaz.OnFunc = testCalc;
tbaz.Func(20);
}
//---------------------------------------------------------------------------
int TForm1::testCalc(int val)
{
ShowMessage(IntToStr(val));
}
//---------------------------------------------------------------------------
||<