Cython: ultragen.pyx

Generated by Cython 3.0a6

Yellow lines hint at Python interaction.
Click on a line that starts with a "`+`" to see the C code that Cython generated for it.

Raw output: ultragen.cpp

    +001: # cython: c_string_type=unicode, c_string_encoding=utf8, language_level=3str

      __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

     002: # distutils: language=c++

    +003: import json

      __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_json, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_json, __pyx_t_1) < 0) __PYX_ERR(0, 3, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

     004:

     005: cimport cython

     006: from libcpp.string cimport string

     007: from libc.stdio cimport printf, sprintf

     008:

    +009: from hypergen.core import context as c

      __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_n_s_context);
      __Pyx_GIVEREF(__pyx_n_s_context);
      PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_context);
      __pyx_t_2 = __Pyx_Import(__pyx_n_s_hypergen_core, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_context); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (PyDict_SetItem(__pyx_d, __pyx_n_s_c, __pyx_t_1) < 0) __PYX_ERR(0, 9, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

     010:

     011: cdef:

    +012:     string T = <char*>"__TERM__" # Terminate list of strings

      __pyx_v_8hypergen_8ultragen_T = ((char *)((char *)"__TERM__"));

    +013:     string* TT = [T]

      __pyx_t_3[0] = __pyx_v_8hypergen_8ultragen_T;
      __pyx_v_8hypergen_8ultragen_TT = __pyx_t_3;

     014:

     015:

     016: # Hypergen state passed around to everything

    +017: cdef Hpg make_hpg():

    static struct __pyx_t_8hypergen_8ultragen_Hpg __pyx_f_8hypergen_8ultragen_make_hpg(void) {
      struct __pyx_t_8hypergen_8ultragen_Hpg __pyx_r;
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("make_hpg", 0);
    /* … */
      /* function exit code */
      __pyx_L1_error:;
      __Pyx_WriteUnraisable("hypergen.ultragen.make_hpg", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
      __Pyx_pretend_to_initialize(&__pyx_r);
      __pyx_L0:;
      __Pyx_RefNannyFinishContext();
      return __pyx_r;
    }

    +018:     return Hpg("", "{")

      __pyx_t_2 = __pyx_convert_string_from_py_std__in_string(__pyx_kp_b_); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 18, __pyx_L1_error)
      __pyx_t_1.html = __pyx_t_2;
      __pyx_t_2 = __pyx_convert_string_from_py_std__in_string(__pyx_kp_b__2); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 18, __pyx_L1_error)
      __pyx_t_1.event_handler_callback_str = __pyx_t_2;
      __pyx_r = __pyx_t_1;
      goto __pyx_L0;

     019:

    +020: cdef void commit(Hpg &hpg):

    static void __pyx_f_8hypergen_8ultragen_commit(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg) {
      __Pyx_RefNannyDeclarations
      __Pyx_RefNannySetupContext("commit", 0);
    /* … */
    /* function exit code */
    goto __pyx_L0;
    __pyx_L1_error:;
    __Pyx_XDECREF(__pyx_t_1);
    __Pyx_XDECREF(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6);
    __Pyx_XDECREF(__pyx_t_7);
    __Pyx_WriteUnraisable("hypergen.ultragen.commit", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
    __pyx_L0:;
    __Pyx_RefNannyFinishContext();
    }

     021:     # TODO: Dont double encode json, use something like this instead:

     022:     # https://stackoverflow.com/questions/12397279/custom-json-encoder-in-python-with-precomputed-literal-json

    +023:     hpg.event_handler_callback_str.append("}")

    (void)(__pyx_v_hpg.event_handler_callback_str.append(((char const *)"}")));

    +024:     c.hypergen.into.append(hpg.html)

    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_c); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_hypergen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_into); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_v_hpg.html); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_t_2); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 24, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    +025:     c.hypergen.event_handler_callbacks.update(json.loads(hpg.event_handler_callback_str))

    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_c); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_hypergen); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_event_handler_callbacks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_update); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_json); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_loads); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_v_hpg.event_handler_callback_str); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_6, function);
        __pyx_t_8 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __pyx_t_6 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_1};
      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

     026:

     027: # Server callback

    +028: cdef string cb(Hpg &hpg, string id_, string attr_name, string url, string* args=TT, int blocks=False,

    static std::string __pyx_f_8hypergen_8ultragen_cb(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_id_, std::string __pyx_v_attr_name, std::string __pyx_v_url, struct __pyx_opt_args_8hypergen_8ultragen_cb *__pyx_optional_args) {
    std::string *__pyx_v_args = __pyx_k__3;
    int __pyx_v_blocks = ((int)0);
    int __pyx_v_debounce = ((int)0);
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }
    /* … */
      __pyx_k__3 = __pyx_v_8hypergen_8ultragen_TT;

    +029:                string confirm=<char*>"", int debounce=0, int clear=False, int upload_files=False) nogil:

    int __pyx_v_clear = ((int)0);
    int __pyx_v_upload_files = ((int)0);
    std::string __pyx_v_html;
    std::string __pyx_v_client_state_key;
    std::string __pyx_v_event_handler_callback;
    int __pyx_v_i;
    std::string __pyx_v_arg;
    std::string __pyx_r;
    if (__pyx_optional_args) {
      if (__pyx_optional_args->__pyx_n > 0) {
        __pyx_v_args = __pyx_optional_args->args;
        if (__pyx_optional_args->__pyx_n > 1) {
          __pyx_v_blocks = __pyx_optional_args->blocks;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_debounce = __pyx_optional_args->debounce;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_clear = __pyx_optional_args->clear;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_upload_files = __pyx_optional_args->upload_files;
              }
            }
          }
        }
      }
    }
    /* … */
      __pyx_k__30 = ((char *)((char *)""));

     030:     cdef:

     031:         string html

     032:         string client_state_key

     033:         string event_handler_callback

     034:         int i

     035:

    +036:     client_state_key.append(id_)

    (void)(__pyx_v_client_state_key.append(__pyx_v_id_));

    +037:     client_state_key.append("__")

    (void)(__pyx_v_client_state_key.append(((char const *)"__")));

    +038:     client_state_key.append(attr_name)

    (void)(__pyx_v_client_state_key.append(__pyx_v_attr_name));

     039:

    +040:     html.append("e(event,'")

    (void)(__pyx_v_html.append(((char const *)"e(event,'")));

    +041:     html.append(client_state_key)

    (void)(__pyx_v_html.append(__pyx_v_client_state_key));

    +042:     html.append("')")

    (void)(__pyx_v_html.append(((char const *)"')")));

     043:

    +044:     if hpg.event_handler_callback_str != <char*> "{":

    __pyx_t_1 = ((__pyx_v_hpg.event_handler_callback_str != ((char *)((char *)"{"))) != 0);
      if (__pyx_t_1) {
    /* … */
      }

    +045:         event_handler_callback.append(',')

        (void)(__pyx_v_event_handler_callback.append(((char const *)",")));

    +046:     event_handler_callback.append('"')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"\"")));

    +047:     event_handler_callback.append(client_state_key)

      (void)(__pyx_v_event_handler_callback.append(__pyx_v_client_state_key));

    +048:     event_handler_callback.append('":')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"\":")));

     049:

    +050:     event_handler_callback.append('["hypergen.callback", "')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"[\"hypergen.callback\", \"")));

    +051:     event_handler_callback.append(url)

      (void)(__pyx_v_event_handler_callback.append(__pyx_v_url));

    +052:     event_handler_callback.append('",')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"\",")));

     053:

    +054:     event_handler_callback.append('[')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"[")));

    +055:     for i in range(100):

      for (__pyx_t_2 = 0; __pyx_t_2 < 0x64; __pyx_t_2+=1) {
        __pyx_v_i = __pyx_t_2;

    +056:         arg = args[i]

        __pyx_v_arg = (__pyx_v_args[__pyx_v_i]);

    +057:         if arg == T:

        __pyx_t_1 = ((__pyx_v_arg == __pyx_v_8hypergen_8ultragen_T) != 0);
        if (__pyx_t_1) {
    /* … */
        }

    +058:             break

          goto __pyx_L5_break;

    +059:         elif i != 0:

        __pyx_t_1 = ((__pyx_v_i != 0) != 0);
        if (__pyx_t_1) {
    /* … */
        }

    +060:             event_handler_callback.append(",")

          (void)(__pyx_v_event_handler_callback.append(((char const *)",")));

    +061:         event_handler_callback.append(arg)

        (void)(__pyx_v_event_handler_callback.append(__pyx_v_arg));
      }
      __pyx_L5_break:;

    +062:     event_handler_callback.append(']')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"]")));

     063:

    +064:     event_handler_callback.append(', {')

      (void)(__pyx_v_event_handler_callback.append(((char const *)", {")));

    +065:     event_handler_callback.append('"blocks":')

        (void)(__pyx_v_event_handler_callback.append(((char const *)"\"blocks\":")));

    +066:     event_handler_callback.append("true") if blocks is True else event_handler_callback.append("false")

        if (((__pyx_v_blocks == 1) != 0)) {
          __pyx_t_3 = __pyx_v_event_handler_callback.append(((char const *)"true"));
        } else {
          __pyx_t_3 = __pyx_v_event_handler_callback.append(((char const *)"false"));
        }

    +067:     event_handler_callback.append(',"debounce":')

        (void)(__pyx_v_event_handler_callback.append(((char const *)",\"debounce\":")));

    +068:     event_handler_callback.append(n2s(debounce))

        (void)(__pyx_v_event_handler_callback.append(__pyx_fuse_0__pyx_f_8hypergen_8ultragen_n2s(__pyx_v_debounce, NULL)));

    +069:     event_handler_callback.append(',"clear":')

        (void)(__pyx_v_event_handler_callback.append(((char const *)",\"clear\":")));

    +070:     event_handler_callback.append("true") if clear is True else event_handler_callback.append("false")

        if (((__pyx_v_clear == 1) != 0)) {
          __pyx_t_4 = __pyx_v_event_handler_callback.append(((char const *)"true"));
        } else {
          __pyx_t_4 = __pyx_v_event_handler_callback.append(((char const *)"false"));
        }

    +071:     event_handler_callback.append(',"elementId":"')

        (void)(__pyx_v_event_handler_callback.append(((char const *)",\"elementId\":\"")));

    +072:     event_handler_callback.append(id_)

        (void)(__pyx_v_event_handler_callback.append(__pyx_v_id_));

    +073:     event_handler_callback.append('"')

        (void)(__pyx_v_event_handler_callback.append(((char const *)"\"")));

    +074:     event_handler_callback.append(',"uploadFiles":')

        (void)(__pyx_v_event_handler_callback.append(((char const *)",\"uploadFiles\":")));

    +075:     event_handler_callback.append("true") if upload_files is True else event_handler_callback.append("false")

        if (((__pyx_v_upload_files == 1) != 0)) {
          __pyx_t_5 = __pyx_v_event_handler_callback.append(((char const *)"true"));
        } else {
          __pyx_t_5 = __pyx_v_event_handler_callback.append(((char const *)"false"));
        }

     076:

    +077:     event_handler_callback.append('}')

      (void)(__pyx_v_event_handler_callback.append(((char const *)"}")));

    +078:     event_handler_callback.append("]")

      (void)(__pyx_v_event_handler_callback.append(((char const *)"]")));

     079:

    +080:     hpg.event_handler_callback_str.append(event_handler_callback)

      (void)(__pyx_v_hpg.event_handler_callback_str.append(__pyx_v_event_handler_callback));

     081:

    +082:     return html

      __pyx_r = __pyx_v_html;
      goto __pyx_L0;

     083:

     084: # Convert an int or float to a string

     085:

    +086: cdef string n2s(number v, int float_precision=-1) nogil:

    static std::string __pyx_fuse_0__pyx_f_8hypergen_8ultragen_n2s(int __pyx_v_v, struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_n2s *__pyx_optional_args) {
      char __pyx_v_s[0x64];
      std::string __pyx_r;
      if (__pyx_optional_args) {
      }
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }

    static std::string __pyx_fuse_1__pyx_f_8hypergen_8ultragen_n2s(double __pyx_v_v, struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_n2s *__pyx_optional_args) {
      int __pyx_v_float_precision = __pyx_k__4;
      char __pyx_v_s[0x64];
      char __pyx_v_double_fmt[20];
      std::string __pyx_r;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_float_precision = __pyx_optional_args->float_precision;
        }
      }
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }
    /* … */
      __pyx_k__31 = -1L;
      __pyx_k__4 = -1L;
    /* … */
    struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_n2s {
      int __pyx_n;
      int float_precision;
    };
    struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_n2s {
      int __pyx_n;
      int float_precision;
    };

     087:     cdef:

     088:         char s[100]

     089:         char double_fmt[20]

     090:     if number is cython.int:

    +091:         sprintf(s, "%d", v)

      (void)(sprintf(__pyx_v_s, ((char const *)"%d"), __pyx_v_v));

     092:     elif number is cython.double:

    +093:         if float_precision == -1:

      __pyx_t_1 = ((__pyx_v_float_precision == -1L) != 0);
      if (__pyx_t_1) {
    /* … */
        goto __pyx_L3;
      }

    +094:             sprintf(s, "%f", v)

        (void)(sprintf(__pyx_v_s, ((char const *)"%f"), __pyx_v_v));

     095:         else:

    +096:             sprintf(double_fmt, "%%.%df", float_precision)

      /*else*/ {
        (void)(sprintf(__pyx_v_double_fmt, ((char const *)"%%.%df"), __pyx_v_float_precision));

    +097:             sprintf(s, double_fmt, v)

        (void)(sprintf(__pyx_v_s, __pyx_v_double_fmt, __pyx_v_v));
      }
      __pyx_L3:;

     098:     else:

     099:         raise Exception("Unknown type")

     100:

    +101:     return <string>s

      __pyx_r = ((std::string)__pyx_v_s);
      goto __pyx_L0;
    /* … */
      __pyx_r = ((std::string)__pyx_v_s);
      goto __pyx_L0;

     102:

    +103: cdef string arg(whatever v) nogil:

    static std::string __pyx_fuse_0__pyx_f_8hypergen_8ultragen_arg(int __pyx_v_v) {
      char __pyx_v_s[20];
      std::string __pyx_r;
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }

    static std::string __pyx_fuse_1__pyx_f_8hypergen_8ultragen_arg(double __pyx_v_v) {
      char __pyx_v_s[20];
      std::string __pyx_r;
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }

    static std::string __pyx_fuse_2__pyx_f_8hypergen_8ultragen_arg(char *__pyx_v_v) {
      std::string __pyx_v_cs;
      std::string __pyx_r;
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }

    static std::string __pyx_fuse_3__pyx_f_8hypergen_8ultragen_arg(std::string __pyx_v_v) {
      std::string __pyx_r;
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }

     104:     cdef char s[20]

     105:     cdef string cs

     106:     if whatever is cython.int:

    +107:         sprintf(s, "%d", v)

      (void)(sprintf(__pyx_v_s, ((char const *)"%d"), __pyx_v_v));

    +108:         return <string> s

      __pyx_r = ((std::string)__pyx_v_s);
      goto __pyx_L0;

     109:     elif whatever is cython.double:

    +110:         sprintf(s, "%f", v)

      (void)(sprintf(__pyx_v_s, ((char const *)"%f"), __pyx_v_v));

    +111:         return <string> s

      __pyx_r = ((std::string)__pyx_v_s);
      goto __pyx_L0;

     112:     elif whatever is cython.p_char:

    +113:         cs.append('"')

      (void)(__pyx_v_cs.append(((char const *)"\"")));

    +114:         cs.append(v)

      (void)(__pyx_v_cs.append(__pyx_v_v));

    +115:         cs.append('"')

      (void)(__pyx_v_cs.append(((char const *)"\"")));

    +116:         return cs

      __pyx_r = __pyx_v_cs;
      goto __pyx_L0;

     117:     elif whatever is string:

    +118:         return v

      __pyx_r = __pyx_v_v;
      goto __pyx_L0;

     119:     else:

     120:         raise Exception("Bad type")

     121:

     122:

    +123: cdef string arg_el(string id_, string value_func=<char*>"hypergen.read.value", string coerce_func=<char*>"null") nogil:

    static std::string __pyx_f_8hypergen_8ultragen_arg_el(std::string __pyx_v_id_, struct __pyx_opt_args_8hypergen_8ultragen_arg_el *__pyx_optional_args) {
      std::string __pyx_v_value_func = __pyx_k__5;
      std::string __pyx_v_coerce_func = __pyx_k__6;
      std::string __pyx_v_s;
      std::string __pyx_r;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_value_func = __pyx_optional_args->value_func;
          if (__pyx_optional_args->__pyx_n > 1) {
            __pyx_v_coerce_func = __pyx_optional_args->coerce_func;
          }
        }
      }
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }
    /* … */
      __pyx_k__5 = ((char *)((char *)"hypergen.read.value"));
      __pyx_k__6 = ((char *)((char *)"null"));

     124:     cdef string s

    +125:     s.append('["_","element_value",["')

      (void)(__pyx_v_s.append(((char const *)"[\"_\",\"element_value\",[\"")));

    +126:     s.append(value_func)

      (void)(__pyx_v_s.append(__pyx_v_value_func));

    +127:     s.append('", ')

      (void)(__pyx_v_s.append(((char const *)"\", ")));

    +128:     if coerce_func == <char*>"null":

      __pyx_t_1 = ((__pyx_v_coerce_func == ((char *)((char *)"null"))) != 0);
      if (__pyx_t_1) {
    /* … */
        goto __pyx_L3;
      }

    +129:         s.append("null")

        (void)(__pyx_v_s.append(((char const *)"null")));

     130:     else:

    +131:         s.append('"')

      /*else*/ {
        (void)(__pyx_v_s.append(((char const *)"\"")));

    +132:         s.append(coerce_func)

        (void)(__pyx_v_s.append(__pyx_v_coerce_func));

    +133:         s.append('"')

        (void)(__pyx_v_s.append(((char const *)"\"")));
      }
      __pyx_L3:;

     134:

    +135:     s.append(', "')

      (void)(__pyx_v_s.append(((char const *)", \"")));

    +136:     s.append(id_)

      (void)(__pyx_v_s.append(__pyx_v_id_));

    +137:     s.append('"]]')

      (void)(__pyx_v_s.append(((char const *)"\"]]")));

     138:

    +139:     return s

      __pyx_r = __pyx_v_s;
      goto __pyx_L0;

     140:

     141: # Base HTML element

    +142: cdef void element(string tag, Hpg &hpg, whatever s, string* attrs=TT) nogil:

    static void __pyx_fuse_0__pyx_f_8hypergen_8ultragen_element(std::string __pyx_v_tag, struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, int __pyx_v_s, struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_element *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__7;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static void __pyx_fuse_1__pyx_f_8hypergen_8ultragen_element(std::string __pyx_v_tag, struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, double __pyx_v_s, struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_element *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__8;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static void __pyx_fuse_2__pyx_f_8hypergen_8ultragen_element(std::string __pyx_v_tag, struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, char *__pyx_v_s, struct __pyx_fuse_2__pyx_opt_args_8hypergen_8ultragen_element *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__9;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static void __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(std::string __pyx_v_tag, struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_fuse_3__pyx_opt_args_8hypergen_8ultragen_element *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__10;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__7 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__8 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__9 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__10 = __pyx_v_8hypergen_8ultragen_TT;
    /* … */
    struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_element {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_element {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_2__pyx_opt_args_8hypergen_8ultragen_element {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_3__pyx_opt_args_8hypergen_8ultragen_element {
      int __pyx_n;
      std::string *attrs;
    };

    +143:     element_open(tag, hpg, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_f_8hypergen_8ultragen_element_open(__pyx_v_tag, __pyx_v_hpg, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_f_8hypergen_8ultragen_element_open(__pyx_v_tag, __pyx_v_hpg, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_f_8hypergen_8ultragen_element_open(__pyx_v_tag, __pyx_v_hpg, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_f_8hypergen_8ultragen_element_open(__pyx_v_tag, __pyx_v_hpg, &__pyx_t_1);

     144:     if whatever is cython.int:

    +145:         hpg.html.append(n2s(s))

      (void)(__pyx_v_hpg.html.append(__pyx_fuse_0__pyx_f_8hypergen_8ultragen_n2s(__pyx_v_s, NULL)));

     146:     elif whatever is cython.double:

    +147:         hpg.html.append(n2s(s))

      (void)(__pyx_v_hpg.html.append(__pyx_fuse_1__pyx_f_8hypergen_8ultragen_n2s(__pyx_v_s, NULL)));

     148:     elif whatever is cython.p_char:

    +149:         hpg.html.append(s)

      (void)(__pyx_v_hpg.html.append(__pyx_v_s));

     150:     elif whatever is string:

    +151:         hpg.html.append(s)

      (void)(__pyx_v_hpg.html.append(__pyx_v_s));

     152:     # elif whatever is unicode:

     153:     #     with gil:

     154:     #         hpg.html.append(<string>s)

     155:     else:

     156:         raise Exception("Bad type")

    +157:     element_close(tag, hpg)

      __pyx_f_8hypergen_8ultragen_element_close(__pyx_v_tag, __pyx_v_hpg);
    /* … */
      __pyx_f_8hypergen_8ultragen_element_close(__pyx_v_tag, __pyx_v_hpg);
    /* … */
      __pyx_f_8hypergen_8ultragen_element_close(__pyx_v_tag, __pyx_v_hpg);
    /* … */
      __pyx_f_8hypergen_8ultragen_element_close(__pyx_v_tag, __pyx_v_hpg);

     158:

    +159: cdef void element_open(string tag, Hpg &hpg, string* attrs=TT) nogil:

    static void __pyx_f_8hypergen_8ultragen_element_open(std::string __pyx_v_tag, struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, struct __pyx_opt_args_8hypergen_8ultragen_element_open *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__11;
      int __pyx_v_i;
      int __pyx_v_j;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__11 = __pyx_v_8hypergen_8ultragen_TT;
    /* … */
    struct __pyx_opt_args_8hypergen_8ultragen_element_open {
      int __pyx_n;
      std::string *attrs;
    };

     160:     cdef int i, j

    +161:     hpg.html.append('<')

      (void)(__pyx_v_hpg.html.append(((char const *)"<")));

    +162:     hpg.html.append(tag)

      (void)(__pyx_v_hpg.html.append(__pyx_v_tag));

     163:

    +164:     if attrs[0] != T:

      __pyx_t_1 = (((__pyx_v_attrs[0]) != __pyx_v_8hypergen_8ultragen_T) != 0);
      if (__pyx_t_1) {
    /* … */
      }

    +165:         for i in range(0, 100, 2):

        for (__pyx_t_2 = 0; __pyx_t_2 < 0x64; __pyx_t_2+=2) {
          __pyx_v_i = __pyx_t_2;

    +166:             j = i + 1

          __pyx_v_j = (__pyx_v_i + 1);

    +167:             if attrs[i] == T:

          __pyx_t_1 = (((__pyx_v_attrs[__pyx_v_i]) == __pyx_v_8hypergen_8ultragen_T) != 0);
          if (__pyx_t_1) {
    /* … */
          }

    +168:                 break

            goto __pyx_L5_break;

     169:             else:

    +170:                 hpg.html.append(" ")

          /*else*/ {
            (void)(__pyx_v_hpg.html.append(((char const *)" ")));

    +171:                 hpg.html.append(attrs[i])

            (void)(__pyx_v_hpg.html.append((__pyx_v_attrs[__pyx_v_i])));

    +172:                 hpg.html.append('="')

            (void)(__pyx_v_hpg.html.append(((char const *)"=\"")));

    +173:                 hpg.html.append(attrs[j])

            (void)(__pyx_v_hpg.html.append((__pyx_v_attrs[__pyx_v_j])));

    +174:                 hpg.html.append('"')

            (void)(__pyx_v_hpg.html.append(((char const *)"\"")));
          }
        }
        __pyx_L5_break:;

     175:

    +176:     hpg.html.append('>')

      (void)(__pyx_v_hpg.html.append(((char const *)">")));

     177:

    +178: cdef void element_close(string tag, Hpg &hpg) nogil:

    static void __pyx_f_8hypergen_8ultragen_element_close(std::string __pyx_v_tag, struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg) {
    /* … */
      /* function exit code */
    }

    +179:     hpg.html.append('</')

      (void)(__pyx_v_hpg.html.append(((char const *)"</")));

    +180:     hpg.html.append(tag)

      (void)(__pyx_v_hpg.html.append(__pyx_v_tag));

    +181:     hpg.html.append('>\n')

      (void)(__pyx_v_hpg.html.append(((char const *)">\n")));

     182:

     183: # HTML elements

    +184: cdef inline void div(Hpg &hpg, whatever s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_fuse_0__pyx_f_8hypergen_8ultragen_div(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, int __pyx_v_s, struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_div *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__12;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static CYTHON_INLINE void __pyx_fuse_1__pyx_f_8hypergen_8ultragen_div(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, double __pyx_v_s, struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_div *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__13;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static CYTHON_INLINE void __pyx_fuse_2__pyx_f_8hypergen_8ultragen_div(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, char *__pyx_v_s, struct __pyx_fuse_2__pyx_opt_args_8hypergen_8ultragen_div *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__14;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static CYTHON_INLINE void __pyx_fuse_3__pyx_f_8hypergen_8ultragen_div(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_fuse_3__pyx_opt_args_8hypergen_8ultragen_div *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__15;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__12 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__13 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__14 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__15 = __pyx_v_8hypergen_8ultragen_TT;
    /* … */
    struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_div {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_div {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_2__pyx_opt_args_8hypergen_8ultragen_div {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_3__pyx_opt_args_8hypergen_8ultragen_div {
      int __pyx_n;
      std::string *attrs;
    };

    +185:     element(<char*>"div", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_0__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"div")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_1__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"div")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_2__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"div")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"div")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     186:

    +187: cdef inline void p(Hpg &hpg, whatever s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_fuse_0__pyx_f_8hypergen_8ultragen_p(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, int __pyx_v_s, struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_p *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__16;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static CYTHON_INLINE void __pyx_fuse_1__pyx_f_8hypergen_8ultragen_p(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, double __pyx_v_s, struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_p *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__17;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static CYTHON_INLINE void __pyx_fuse_2__pyx_f_8hypergen_8ultragen_p(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, char *__pyx_v_s, struct __pyx_fuse_2__pyx_opt_args_8hypergen_8ultragen_p *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__18;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }

    static CYTHON_INLINE void __pyx_fuse_3__pyx_f_8hypergen_8ultragen_p(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_fuse_3__pyx_opt_args_8hypergen_8ultragen_p *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__19;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__16 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__17 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__18 = __pyx_v_8hypergen_8ultragen_TT;
      __pyx_k__19 = __pyx_v_8hypergen_8ultragen_TT;
    /* … */
    struct __pyx_fuse_0__pyx_opt_args_8hypergen_8ultragen_p {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_1__pyx_opt_args_8hypergen_8ultragen_p {
      int __pyx_n;
      std::string *attrs;
    };
    struct __pyx_fuse_2__pyx_opt_args_8hypergen_8ultragen_p {
      int __pyx_n;
      std::string *attrs;
    };

    +188:     element(<char*>"p", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_0__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"p")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_1__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"p")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_2__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"p")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);
    /* … */
      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"p")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     189:

    +190: cdef inline void a(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_a(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_a *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__20;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__20 = __pyx_v_8hypergen_8ultragen_TT;

    +191:     element(<char*>"a", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"a")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     192:

    +193: cdef inline void h1(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_h1(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_h1 *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__21;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__21 = __pyx_v_8hypergen_8ultragen_TT;

    +194:     element(<char*>"h1", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"h1")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     195:

    +196: cdef inline void b(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_b(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_b *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__22;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__22 = __pyx_v_8hypergen_8ultragen_TT;

    +197:     element(<char*>"b", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"b")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     198:

    +199: cdef inline void button(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_button(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_button *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__23;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__23 = __pyx_v_8hypergen_8ultragen_TT;

    +200:     element(<char*>"button", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"button")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     201:

    +202: cdef inline int table_o(Hpg &hpg, string* attrs=TT) nogil:

    static CYTHON_INLINE int __pyx_f_8hypergen_8ultragen_table_o(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, struct __pyx_opt_args_8hypergen_8ultragen_table_o *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__24;
      int __pyx_r;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }
    /* … */
      __pyx_k__24 = __pyx_v_8hypergen_8ultragen_TT;

    +203:     element_open(<char*>"table", hpg, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_f_8hypergen_8ultragen_element_open(((char *)((char *)"table")), __pyx_v_hpg, &__pyx_t_1);

    +204:     return True

      __pyx_r = 1;
      goto __pyx_L0;

     205:

    +206: cdef inline void table_c(Hpg &hpg) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_table_c(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg) {
    /* … */
      /* function exit code */
    }

    +207:     element_close(<char*>"table", hpg)

      __pyx_f_8hypergen_8ultragen_element_close(((char *)((char *)"table")), __pyx_v_hpg);

     208:

    +209: cdef inline void tr(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_tr(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_tr *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__25;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__25 = __pyx_v_8hypergen_8ultragen_TT;

    +210:     element(<char*>"tr", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"tr")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     211:

    +212: cdef inline int tr_o(Hpg &hpg, string* attrs=TT) nogil:

    static CYTHON_INLINE int __pyx_f_8hypergen_8ultragen_tr_o(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, struct __pyx_opt_args_8hypergen_8ultragen_tr_o *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__26;
      int __pyx_r;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
      __pyx_L0:;
      return __pyx_r;
    }
    /* … */
      __pyx_k__26 = __pyx_v_8hypergen_8ultragen_TT;

    +213:     element_open(<char*>"tr", hpg, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_f_8hypergen_8ultragen_element_open(((char *)((char *)"tr")), __pyx_v_hpg, &__pyx_t_1);

    +214:     return True

      __pyx_r = 1;
      goto __pyx_L0;

     215:

    +216: cdef inline void tr_c(Hpg &hpg) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_tr_c(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg) {
    /* … */
      /* function exit code */
    }

    +217:     element_close(<char*>"tr", hpg)

      __pyx_f_8hypergen_8ultragen_element_close(((char *)((char *)"tr")), __pyx_v_hpg);

     218:

    +219: cdef inline void td(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_td(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_td *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__27;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__27 = __pyx_v_8hypergen_8ultragen_TT;

    +220:     element(<char*>"td", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"td")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);

     221:

    +222: cdef inline void textarea(Hpg &hpg, string s, string* attrs=TT) nogil:

    static CYTHON_INLINE void __pyx_f_8hypergen_8ultragen_textarea(struct __pyx_t_8hypergen_8ultragen_Hpg &__pyx_v_hpg, std::string __pyx_v_s, struct __pyx_opt_args_8hypergen_8ultragen_textarea *__pyx_optional_args) {
      std::string *__pyx_v_attrs = __pyx_k__28;
      if (__pyx_optional_args) {
        if (__pyx_optional_args->__pyx_n > 0) {
          __pyx_v_attrs = __pyx_optional_args->attrs;
        }
      }
    /* … */
      /* function exit code */
    }
    /* … */
      __pyx_k__28 = __pyx_v_8hypergen_8ultragen_TT;

    +223:     element(<char*>"textarea", hpg, s, attrs)

      __pyx_t_1.__pyx_n = 1;
      __pyx_t_1.attrs = __pyx_v_attrs;
      __pyx_fuse_3__pyx_f_8hypergen_8ultragen_element(((char *)((char *)"textarea")), __pyx_v_hpg, __pyx_v_s, &__pyx_t_1);