"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"