OSDN Git Service

* Added New Features.
[modchxj/mod_chxj.git] / src / chxj_chtml20.c
index 3424c52..1d9d8a0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2005-2008 Atsushi Konno All rights reserved.
+ * Copyright (C) 2005-2009 Atsushi Konno All rights reserved.
  * Copyright (C) 2005 QSDN,Inc. All rights reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -567,6 +567,66 @@ s_chtml20_search_emoji(chtml20_t *chtml20, char *txt, char **rslt)
   return 0;
 }
 
+char *
+chxj_chtml20_emoji_only_converter(request_rec *r, device_table *spec, const char *src, apr_size_t len)
+{
+  apr_size_t ii;
+  Doc __doc;
+  Doc *doc;
+  chtml20_t __chtml20;
+  chtml20_t *chtml20;
+  char one_byte[2];
+  char two_byte[3];
+  apr_pool_t *pool;
+
+  chtml20 = &__chtml20;
+  doc     = &__doc;
+
+  DBG(r, "REQ[%X] start chxj_chtml20_emoji_eonly_converter()", (apr_size_t)(unsigned int)r);
+  memset(doc,     0, sizeof(Doc));
+  memset(chtml20, 0, sizeof(chtml20_t));
+
+  doc->r        = r;
+  chtml20->doc  = doc;
+  chtml20->spec = spec;
+  chtml20->out  = qs_alloc_zero_byte_string(r->pool);
+  chtml20->conf = chxj_get_module_config(r->per_dir_config, &chxj_module);
+  chtml20->doc->parse_mode = PARSE_MODE_CHTML;
+
+  apr_pool_create(&pool, r->pool);
+
+  chxj_buffered_write_init(pool, &doc->buf);
+
+  for (ii=0; ii<len; ii++) {
+    char *out;
+    int   rtn;
+
+    rtn = s_chtml20_search_emoji(chtml20, (char *)&src[ii], &out);
+    if (rtn) {
+      W_V(out);
+      ii+=(rtn - 1);
+      continue;
+    }
+
+    if (is_sjis_kanji(src[ii])) {
+      two_byte[0] = src[ii+0];
+      two_byte[1] = src[ii+1];
+      two_byte[2] = 0;
+      W_V(two_byte);
+      ii++;
+    }
+    else {
+      one_byte[0] = src[ii+0];
+      one_byte[1] = 0;
+      W_V(one_byte);
+    }
+  }
+  chtml20->out = chxj_buffered_write_flush(chtml20->out, &doc->buf);
+
+  DBG(r, "REQ[%X] end chxj_chtml20_emoji_eonly_converter()", (apr_size_t)(unsigned int)r);
+  return chtml20->out;
+}
+
 
 /**
  * It is a handler who processes the HTML tag.
@@ -1072,7 +1132,7 @@ s_chtml20_start_a_tag(void *pdoc, Node *node)
         /* CHTML1.0                                                           */
         /*--------------------------------------------------------------------*/
         value = chxj_encoding_parameter(r, value);
-        if (! chxj_starts_with(value, "mailto:") && ! chxj_starts_with(value, "telto:")) {
+        if (! chxj_starts_with(value, "mailto:") && ! chxj_starts_with(value, "tel:")) {
           value = chxj_add_cookie_parameter(r, value, chtml20->cookie);
         }
         W_L(" href=\"");
@@ -1496,15 +1556,20 @@ s_chtml20_start_form_tag(void *pdoc, Node *node)
   W_L("<form");
   if (attr_action) {
     char *q;
+    char *new_query_string = NULL;
     q = strchr(attr_action, '?');
     if (q) {
-      new_hidden_tag = chxj_form_action_to_hidden_tag(r, doc->pool, attr_action, 0, post_flag);
-      if (new_hidden_tag) {
+      new_hidden_tag = chxj_form_action_to_hidden_tag(r, doc->pool, attr_action, 0, post_flag, &new_query_string, CHXJ_TRUE, CHXJ_FALSE, chtml20->entryp);
+      if (new_hidden_tag || new_query_string) {
         *q = 0;
       }
     }
     W_L(" action=\"");
     W_V(attr_action);
+    if (new_query_string) {
+      W_L("?");
+      W_V(new_query_string);
+    }
     W_L("\"");
   }
   if (attr_method) {
@@ -2070,13 +2135,7 @@ s_chtml20_start_img_tag(void *pdoc, Node *node)
 #ifdef IMG_NOT_CONVERT_FILENAME
         value = chxj_encoding_parameter(r, value);
         value = chxj_add_cookie_parameter(r, value, chtml20->cookie);
-        if (value) {
-          value = apr_psprintf(doc->buf.pool,
-                               "%s%c%s=true",
-                               value,
-                               (strchr(value, '?')) ? '&' : '?',
-                               CHXJ_COOKIE_NOUPDATE_PARAM);
-        }
+        value = chxj_add_cookie_no_update_parameter(r, value);
         W_L(" src=\"");
         W_V(value);
         W_L("\"");
@@ -2084,13 +2143,7 @@ s_chtml20_start_img_tag(void *pdoc, Node *node)
         value = chxj_img_conv(r, spec, value);
         value = chxj_encoding_parameter(r, value);
         value = chxj_add_cookie_parameter(r, value, chtml20->cookie);
-        if (value) {
-          value = apr_psprintf(doc->buf.pool,
-                               "%s%c%s=true",
-                               value,
-                               (strchr(value, '?')) ? '&' : '?',
-                               CHXJ_COOKIE_NOUPDATE_PARAM);
-        }
+        value = chxj_add_cookie_no_update_parameter(r, value);
         W_L(" src=\"");
         W_V(value);
         W_L("\"");
@@ -2361,7 +2414,7 @@ s_chtml20_start_option_tag(void *pdoc, Node *child)
     }
   }
 
-  if (value && *value) {
+  if (value) {
     W_L(" value=\"");
     W_V(value);
     W_L("\"");