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);