"Fossies" - the Fresh Open Source Software Archive 
Member "ansifilter-2.18/src/tcl/tclansifilter.c" (30 Jan 2021, 2638 Bytes) of package /linux/privat/ansifilter-2.18.tar.bz2:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "tclansifilter.c" see the
Fossies "Dox" file reference documentation.
1 /*
2 * tclansifilter.c -- a minimal Tcl wrapper for ansifilter
3 */
4 #include <tcl.h>
5 #include <memory>
6 #include "../codegenerator.h"
7
8 // Tcl namespace
9 #define NS "ansifilter"
10
11 // ansifilter requires C++ compiler
12 extern "C" {
13
14
15 static int
16 Execute_Escape_Cmd(ansifilter::OutputType type, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
17 {
18 int i;
19 // XXX this creates and destroys new instances for every call!
20 auto_ptr<ansifilter::CodeGenerator> generator(ansifilter::CodeGenerator::getInstance(type));
21 generator->setFragmentCode(1); // -f
22 generator->setPlainOutput(0);
23 for (i = 1; i < objc; i++) {
24 Tcl_AppendResult(interp, generator->generateString(Tcl_GetString(objv[i])).c_str(), NULL);
25 }
26 return TCL_OK;
27 }
28
29 static int
30 LaTeXEscape_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
31 {
32 return Execute_Escape_Cmd(ansifilter::LATEX, interp, objc, objv);
33 }
34
35 static int
36 TeXEscape_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
37 {
38 return Execute_Escape_Cmd(ansifilter::TEX, interp, objc, objv);
39 }
40
41 static int
42 HtmlEscape_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
43 {
44 return Execute_Escape_Cmd(ansifilter::HTML, interp, objc, objv);
45 }
46
47 static int
48 TextEscape_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
49 {
50 return Execute_Escape_Cmd(ansifilter::TEXT, interp, objc, objv);
51 }
52
53 static int
54 BBCodeEscape_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
55 {
56 return Execute_Escape_Cmd(ansifilter::BBCODE, interp, objc, objv);
57 }
58
59 static int
60 PangoEscape_Cmd(ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
61 {
62 return Execute_Escape_Cmd(ansifilter::PANGO, interp, objc, objv);
63 }
64 /*
65 * Tclansifilter_Init -- Called when Tcl loads your extension.
66 */
67 int DLLEXPORT
68 Tclansifilter_Init(Tcl_Interp *interp)
69 {
70 if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) {
71 return TCL_ERROR;
72 }
73 // provide package
74 if (Tcl_PkgProvide(interp, "ansifilter", "0.2") == TCL_ERROR) {
75 return TCL_ERROR;
76 }
77 // create command
78 Tcl_CreateObjCommand(interp, NS "::tex", TeXEscape_Cmd, NULL, NULL);
79 Tcl_CreateObjCommand(interp, NS "::latex", LaTeXEscape_Cmd, NULL, NULL);
80 Tcl_CreateObjCommand(interp, NS "::html", HtmlEscape_Cmd, NULL, NULL);
81 Tcl_CreateObjCommand(interp, NS "::text", TextEscape_Cmd, NULL, NULL);
82 Tcl_CreateObjCommand(interp, NS "::bbcode", BBCodeEscape_Cmd, NULL, NULL);
83 Tcl_CreateObjCommand(interp, NS "::pango", PangoEscape_Cmd, NULL, NULL);
84
85 return TCL_OK;
86 }
87
88 } // extern "C"