2005年11月05日 星期六 12:35
如何把Docbook转换为wiki的代码?有写好的xlst吗?
2005年11月05日 星期六 21:19
2005/11/5, 张沈鹏 <zsp747 at gmail.com>: > 如何把Docbook转换为wiki的代码?有写好的xlst吗? 要转成moinmoin格式吗?可以先转为html,然后再转为moin。我写了一个利用NewEdit来转换html为moin格式的script。 下载地址: http://wiki.woodpecker.org.cn/moin/NewEditScripts -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2005年11月06日 星期日 02:07
limodou 写道: >2005/11/5, 张沈鹏 <zsp747 at gmail.com>: > > >>如何把Docbook转换为wiki的代码?有写好的xlst吗? >> >> > >要转成moinmoin格式吗?可以先转为html,然后再转为moin。我写了一个利用NewEdit来转换html为moin格式的script。 > >下载地址: http://wiki.woodpecker.org.cn/moin/NewEditScripts > > >-- >I like python! >My Blog: http://www.donews.net/limodou >NewEdit Maillist: http://groups.google.com/group/NewEdit > > >------------------------------------------------------------------------ > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > > 我用附件中的文件试了一下您的script,出错提示如下: 编译脚本错误。 出错跟踪: Traceback (most recent call last): File "mixins\Import.pyo", line 3231, in OnScriptItems UnicodeEncodeError: 'ascii' codec can't encode characters in position 30-31: ordinal not in range(128) 请问可以解决吗? -------------- next part -------------- A non-text attachment was scrubbed... Name: =?UTF-8?B?56iL5bqP5ZGY77yM5Zyo6Lev5LiKLnhodG1s?= Type: application/xhtml+xml Size: 20296 bytes Desc: not available Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20051106/55cbc991/UTF-8B56iL5bqP5ZGY77yM5Zyo6Lev5LiKLnhodG1s-0001.xhtml
2005年11月06日 星期日 12:02
> 我用附件中的文件试了一下您的script,出错提示如下: > 编译脚本错误。 > > 出错跟踪: > > Traceback (most recent call last): > File "mixins\Import.pyo", line 3231, in OnScriptItems > UnicodeEncodeError: 'ascii' codec can't encode characters in position > 30-31: ordinal not in range(128) > 请问可以解决吗? > 把你的具体操作步骤写一下,感觉是编码的问题,不知道你的原文档是不是有特殊的内容。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit
2005年11月06日 星期日 12:45
limodou 写道: >>我用附件中的文件试了一下您的script,出错提示如下: >>编译脚本错误。 >> >>出错跟踪: >> >>Traceback (most recent call last): >> File "mixins\Import.pyo", line 3231, in OnScriptItems >>UnicodeEncodeError: 'ascii' codec can't encode characters in position >>30-31: ordinal not in range(128) >>请问可以解决吗? >> >> >> > >把你的具体操作步骤写一下,感觉是编码的问题,不知道你的原文档是不是有特殊的内容。 > >-- >I like python! >My Blog: http://www.donews.net/limodou >NewEdit Maillist: http://groups.google.com/group/NewEdit > > >------------------------------------------------------------------------ > >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > > 用newEdit打开附件中的Html,选择“工具-〉脚本-〉html2moin.py”,然后出错, 您可以用附件中的文件试一试 -------------- next part -------------- A non-text attachment was scrubbed... Name: =?UTF-8?B?56iL5bqP5ZGY77yM5Zyo6Lev5LiKLnhodG1s?= Type: application/xhtml+xml Size: 20296 bytes Desc: not available Url : http://lists.exoweb.net/pipermail/python-chinese/attachments/20051106/e978b4e1/UTF-8B56iL5bqP5ZGY77yM5Zyo6Lev5LiKLnhodG1s-0001.xhtml
2005年11月06日 星期日 13:41
> 用newEdit打开附件中的Html,选择"工具-〉脚本-〉html2moin.py",然后出错, > 您可以用附件中的文件试一试 > 我试了一下,没有问题呀。不过我使用的应该是我的最新版本,不知道有没有关系。转换后的内容见附件里。建议下载新的NewEdit试一试,从svn中最好。 -- I like python! My Blog: http://www.donews.net/limodou NewEdit Maillist: http://groups.google.com/group/NewEdit -------------- next part -------------- = 程序员,在路上 = === 张沈鹏 ===<[mailto:zsp747 at gmail.com zsp747 at gmail.com]> ---- '''目录''' 1. 初学wxWidgets 第一个程序 事件驱动(Event-Driven) 让一个事件可以被多次处理 在窗体中加载/移出事件表 动态事件表 2. (其他)大二诗集 风中 '''插图清单''' 1.1. 第一个程序的截图 '''范例清单''' 1.1. 一个事件表 1.2. 一个事件表中被绑定的函数的声明 1.3. helloWorld改版----wxCommandEven::skip()的示例 1.4. helloWorld改版----wxWindow::PopEventHandler的示例 == 第 1 章 初学wxWidgets == '''目录''' 第一个程序 事件驱动(Event-Driven) 让一个事件可以被多次处理 在窗体中加载/移出事件表 动态事件表 == 第一个程序 == wxWidgets库的,是一个结构类似于MFC的开源的C++库,它的特点是跨平台:一次编程便可以在从XP到Linux,苹果机,WinCE等等操作系统上重新编译,运行. 安装和编译wxWidgets库我就不说了,大家可以参考Code Project上的"Introduction to wxWidgets"(作者:Priyank Bolia,期待哪位英文好的高手翻译一下). ../binaryfiles/images/caution.png 注意:"Introduction to wxWidgets"中路径设置的问题 环境变量"WXWIN"应该设置为"c:\???"而不是"c:\???\",然后包含目录的时候格式为"$(WXWIN)\include\"而不是"$(WXWIN)include\".我也提供了一个VS2003修正版的"HelloWorld"的解决方案(本文的源代码只需直接复制到hello.cpp中便可编译运行). 照着这篇文章安装,编译,设置环境变量之后,就可以开始我们的程序了.我的IDE是VS2003(Microsoft Visual Studio .NET 2003),wxWidgets库的版本是2.6.1. '''图 1.1. 第一个程序的截图'''../binaryfiles/figures/hello_world.png 先了解一下"HelloWorld"的源代码 '''过程 1.1. 程序的调用顺序''' 1. 用宏绑定main函数 1. MyApp::OnInit() 1. MyFrame初始化:设置界面布局,绑定按钮到事件表 1. 通知计算机显示MyFrame 被按下按钮-->回调事件表中的相应函数 {{{#!python #include "wx/wx.h" #include "mainico.xpm"//包含图标文件,格式为XPM,我在源代码之后有该格式的说明 //新建一个窗体 class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); //事件处理函数 void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); //这个呢,写过MFC的朋友一定眼熟,就是消息映射了,wxWidgets叫事件表 DECLARE_EVENT_TABLE() }; enum { ID_Quit, ID_About, }; //这里是事件的映射,当触发什么事件(如MENU_ABOUT)时候,调用什么函数(MyApp::OnAbout) BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) END_EVENT_TABLE() //初始化程序 class MyApp: public wxApp { virtual bool OnInit(); }; //把main函数放在这里 IMPLEMENT_APP(MyApp) //程序初始化的代码 bool MyApp::OnInit() { /* wxT("Hello World")中"wxT"是一个宏,也可以写作"_T()",用于在编译时改变文字的编码. 比如,一个程序可以分别编译为ASCLL码版(只支持英文)和UTF-8版(支持多国语言) */ MyFrame *frame = new MyFrame( wxT("Hello World"), wxPoint(299,250), wxSize(340,340) ); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { SetIcon(wxIcon(mainico_xpm));//设置图标(mainico_xpm变量在mainico.xpm被声明) wxMenu *menuFile = new wxMenu;//菜单条中一个条目 menuFile->Append( ID_About, wxT("&A;菜单项--弹出窗口") ); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, wxT("&Q;退出") ); wxMenuBar *menuBar = new wxMenuBar;//菜单条 menuBar->Append( menuFile, wxT("&M;菜单条中的条目" )); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText(wxT( "欢迎使用wxWidgets!") );//状态栏 } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(TRUE); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox(wxT("消息框的文字:地球人,你好!"), wxT("消息框的标题"), wxOK | wxICON_MASK , this); } }}} ../binaryfiles/images/tip.png XPM图像格式说明 把其他图片格式转换为XPM格式可以用一个免费软件XnView(有汉化版),另外图片该程序的图标大小应该为16*16像素。 用文本编辑器打开XPM文件后可以看到内容如下: {{{#!python /* XPM */ static char *mainico_xpm[] = { /* width height num_colors chars_per_pixel */ " 16 16 256 2", /* colors */ "`` c #000000", "`. c #173b03", "`# c #62ce19", ...................等等 }}} == 事件驱动(Event-Driven) == 所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作. weWidgets的中所有可以处理事件的类都继承自'''wxEvtHandler''',其中包含frames, buttons, menus, even documents,所有的窗体类(即从wxWindow继承的类)和程序类(application class). 这些类可以有一个事件表,用来绑定事件和被调用的函数(handler functions). '''过程 1.2. 建立一个静态事件表(即编译时生成的事件表)的操作步骤''' 1. 建立一个新类(直接或间接从wxEvtHandler继承) 1. 为每个要处理的事件声明被调用的函数 1. 在被处理的事件所在的类的声明中加入宏'''DECLARE_EVENT_TABLE''' 1. 在宏'''BEGIN_EVENT_TABLE... END_EVENT_TABLE(就是事件表)'''中将函数与枚举的数字绑定(因为产生该类型的事件的按钮不唯一,要用枚举数来区分);有些事件不必与枚举数绑定,因为产生该类型的事件的对象可以确定(比如就是this). '''例 1.1. 一个事件表''' {{{#!python BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU (wxID_ABOUT, MyFrame::OnAbout) EVT_MENU (wxID_EXIT, MyFrame::OnQuit) EVT_SIZE ( MyFrame::OnSize) //不必与枚举数绑定,因为产生该类型的事件的对象是this EVT_BUTTON (wxID_OK, MyFrame::OnButtonOK) END_EVENT_TABLE() }}} 1. 在事件中指定被绑定的数字,wxWidgets会将其映射到对应的函数,并调用函数 所有在事件表中被绑定的函数有相似的形式:返回值都是void,不是virtual函数,参数为wxCommandEvent类型 '''例 1.2. 一个事件表中被绑定的函数的声明''' {{{#!python void OnButtonOK(wxCommandEvent& event); }}} 一般说来,事件会从子类的事件表开始查询调用,如果没有找到对应的调用,再依次查询其各个父类的事件表.但以下的事件例外,不会调用父类事件表wxActivate Event, wxCloseEvent, wxEraseEvent, wxFocusEvent, wxKeyEvent, wxIdleEvent, wxInitDialogEvent, wxJoystickEvent, wxMenuEvent, wxMouseEvent, wxMoveEvent, wxPaintEvent, wxQueryLayoutInfoEvent, wxSizeEvent, wxScrollWinEvent, and wxSysColourChangedEvent(都是些啥玩意?以后慢慢学) == 让一个事件可以被多次处理 == 一个事件只能被处理一次,随即从消息队列(就是所有等待处理的事件)中被删除,也就是说,子类的事件表中处理过的事件,父类事件表中不会再次处理.如果想让该事件消息继续保留在消息队列中,可以使用wxCommandEven中的skip()函数. skip实际用途举例:限制用户输入为数字,而具体的处理交付给父类去做. '''例 1.3. helloWorld改版----wxCommandEven::skip()的示例''' {{{#!python #include "wx/wx.h" #include "mainico.xpm" class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; //新增代码 class MySkip:public MyFrame { public: MySkip(const wxString& title, const wxPoint& pos, const wxSize& size):MyFrame(title,pos,size),i(1) {}; void OnAbout2(wxCommandEvent& event) { i*=-1; if (i>0) { wxMessageBox(wxT("i>0,not SKip(不跳过)")); } else { wxMessageBox(wxT("i<0,will SKip(将跳过)")); event.Skip(); } } private: int i; DECLARE_EVENT_TABLE() }; enum { ID_Quit, ID_About, }; //这里是MyFrame事件的映射 BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) END_EVENT_TABLE() //这里是MySkip事件的映射 BEGIN_EVENT_TABLE(MySkip, MyFrame) EVT_MENU(ID_About, MySkip::OnAbout2) END_EVENT_TABLE() class MyApp: public wxApp { virtual bool OnInit(); }; IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { MySkip *frame = new MySkip( wxT("Hello World"), wxPoint(299,250), wxSize(340,340) ); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { SetIcon(wxIcon(mainico_xpm)); wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, wxT("&wxCommandEven;::skip()函数演示") ); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, wxT("&Q;退出") ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, wxT("&M;菜单条中的条目" )); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText(wxT( "欢迎使用wxWidgets!") ); } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(TRUE); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox(wxT("消息框的文字:地球人,你好!"), wxT("消息框的标题"), wxOK | wxICON_MASK , this); } }}} == 在窗体中加载/移出事件表 == 你除了可以用窗体类的子类来处理事件,也可以用继承wxEvtHandler的类来处理事件。给wxEvtHandler的子类定义一个事件表,并用wxWindow::PushEventHandler函数把这个对象加入该窗体的事件处理流程(栈堆)中去,该对象的事件表会在窗体的事件表之前被处理。当然PushEventHandler也可以用于添加窗体类的子类到该对象的事件表中去. 另外,用wxWindow::PopEventHandler会弹出(就是删除)事件表栈堆顶端的对象,如果执行成功则返回true。 而wxWindow::GetEventHandler可以返回事件表栈堆顶端的对象(如果你没有用PushEventHandler,那么GetEventHandler一般返回窗体自身)。 用独立的事件处理对象(不继承自窗体类)能够把不同的窗体中共同的事件处理动作分离出来,以便重复利用(复用). 有了以上知识我们可以临时或永久的改变一个窗体的事件处理方式. PushEventHandler实际用途举例:一个学习《概率论》的程序,主窗体中在讲述了一个概念之后,弹出一个对话框让用户作练习,这时你可以用PushEventHandler临时把鼠标的事件处理权交给该对话框.完成之后用PopEventHandler返回. '''例 1.4. helloWorld改版----wxWindow::PopEventHandler的示例''' {{{#!python #include "wx/wx.h" #include "mainico.xpm" enum { ID_Quit, ID_About, ID_Add, ID_Move }; //新增代码 class MyEvt:public wxEvtHandler{ public: MyEvt(); void OnClick(wxCommandEvent& e); ~MyEvt(); private: int i; static int number; int myNumber; DECLARE_EVENT_TABLE() }; int MyEvt::number=0; BEGIN_EVENT_TABLE(MyEvt,wxEvtHandler) EVT_MENU(ID_About,MyEvt::OnClick) END_EVENT_TABLE() MyEvt::MyEvt(){ i=1; number+=1; myNumber=number; } MyEvt::~MyEvt() { number-=1; } void MyEvt::OnClick(wxCommandEvent& e) { wxString show=wxT("第"); show<0) { show+=wxT("个事件表 MyEvt::OnClick被调用!"); wxMessageBox(show, wxT("张沈鹏的演示程序"), wxOK ); } else { show+=wxT("个事件表 MyEvt::OnClick被调用, 然后wxCommandEvent::Skip!"); wxMessageBox(show, wxT("张沈鹏的演示程序"), wxOK ); e.Skip(); } i*=-1; } class MyFrame:public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnAdd(wxCommandEvent& event); void OnMove(wxCommandEvent& event); private: MyEvt *evtPro; DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Quit, MyFrame::OnQuit) EVT_MENU(ID_About, MyFrame::OnAbout) EVT_MENU(ID_Add,MyFrame::OnAdd) EVT_MENU(ID_Move,MyFrame::OnMove) END_EVENT_TABLE() class MyApp: public wxApp { virtual bool OnInit(); }; IMPLEMENT_APP(MyApp) bool MyApp::OnInit() { MyFrame *frame = new MyFrame( wxT("Hello World"), wxPoint(299,250), wxSize(340,340) ); frame->Show(TRUE); SetTopWindow(frame); return TRUE; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame((wxFrame *)NULL, -1, title, pos, size) { SetIcon(wxIcon(mainico_xpm)); wxMenu *menuFile = new wxMenu; menuFile->Append( ID_About, wxT("&A;当前的事件表--弹出窗口") ); menuFile->Append(ID_Add,_T("加载事件表(你可以尝试加载多次事件表然后看Skip的结果)")); menuFile->Append(ID_Move,_T("弹出事件表(就是删除当前的事件表,如果没有加载就删除会有错误)")); menuFile->AppendSeparator(); menuFile->Append( ID_Quit, wxT("&Q;退出") ); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, wxT("&M;菜单条中的条目" )); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText(wxT( "欢迎使用wxWidgets!") ); } void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { Close(TRUE); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox(wxT("MyFrame::OnAbout:地球人,你好!"), wxT("消息框的标题"), wxOK | wxICON_MASK , this); } void MyFrame::OnAdd(wxCommandEvent& event) { evtPro=new MyEvt; this->PushEventHandler(evtPro); } void MyFrame::OnMove(wxCommandEvent& event) { this->PopEventHandler(); delete evtPro; } }}} == 动态事件表 == == 第 2 章 (其他)大二诗集 == '''目录''' 风中 == 风中 == '''修订历史''' 2005-11-2 在曾经的星空,做一个天长地久的梦。 落花飞舞的匆匆,飘扬着千古不变的痛。 苦涩的泪,麻木的心是否再也不会感动。 一个人,走过一片血雨腥风。
2005年11月17日 星期四 15:55
moin 1.3.5增加了docbook parser,不过我还没用过 http://moinmoin.wikiwikiweb.de/MoinMoinRelease1.3/CHANGES limodou <limodou at gmail.com> writes: > 要转成moinmoin格式吗?可以先转为html,然后再转为moin。我写了一个利用NewEdit来转换html为moin格式的script。 > > 下载地址: http://wiki.woodpecker.org.cn/moin/NewEditScripts > -- 我且不取你解经论 我亦不取你国王大臣 我亦不取你辩似悬河 我亦不取你聪明智慧 ──唯要你真正见解!
Zeuux © 2025
京ICP备05028076号