Posted to tcl by mjanssen at Tue Jun 23 07:45:15 GMT 2020view pretty

# Copyright (c) 2020, M.P.C. Janssen
# This code is released under
# the terms of the MIT license. See the file LICENSE for details.

package require tls
package require http
package require base64
::http::register https 443 [list ::tls::socket -autoservername 1]

namespace eval ::tclssg::pipeline::10-register-template-command {
    namespace path ::tclssg


    proc plantumlurl {raw} {
        return https://plantuml.mpcjanssen.nl/svg/[string map [list \n {}] [string trim [base64toplantuml [base64::encode [zlib deflate $raw]]]]]
    }
 
    variable base64map
    foreach x {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + /}\
        y {0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z - _} {
            lappend base64map $x $y
    }
    interp alias {} [namespace current]::base64toplantuml {} string map $base64map 

    proc plantumlsvg {uml} {
        set tok [http::geturl [plantumlurl $uml]]
        set data [base64::encode [http::data $tok]]
        http::cleanup $tok
        return "<img src='data:image/svg+xml;base64,$data'/>"
    }

    proc transform {} {
        set me [namespace tail [namespace current]]
        log::info [list running demo plugin $me]
        log::debug $::tclssg::interpreter::aliases

        dict set ::tclssg::interpreter::aliases \
            [namespace current]::plantumlsvg \
            plantumlsvg
    }
}