Rewrite aha to work with new tree system ready for messages and files
This commit is contained in:
@@ -7,11 +7,12 @@
|
||||
|
||||
#include "../deps/hashids/hashids.h"
|
||||
|
||||
#include "www_tree.h"
|
||||
#include "bbs.h"
|
||||
|
||||
extern struct bbs_config conf;
|
||||
extern struct user_record *gUser;
|
||||
extern char *aha(char *input);
|
||||
extern struct www_tag * aha(char *input, struct www_tag *parent);
|
||||
|
||||
static int digit2nibble(int digit) {
|
||||
static const char *const hex = "0123456789abcdef";
|
||||
@@ -298,7 +299,6 @@ char *www_files_display_listing(int dir, int sub) {
|
||||
|
||||
stralloc page = EMPTY_STRALLOC;
|
||||
char pathbuf[PATH_MAX];
|
||||
char *aha_out = NULL;
|
||||
sqlite3 *db = NULL;
|
||||
sqlite3_stmt *res = NULL;
|
||||
int rc = 0;
|
||||
@@ -372,9 +372,13 @@ char *www_files_display_listing(int dir, int sub) {
|
||||
if (*p == '\n')
|
||||
*p = '\r';
|
||||
}
|
||||
aha_out = aha(description);
|
||||
stralloc_cats(&page, aha_out);
|
||||
free(aha_out);
|
||||
struct www_tag *aha_out = www_tag_new(NULL, "");
|
||||
aha(description, aha_out);
|
||||
|
||||
char *aha_data = www_tag_unwravel(aha_out);
|
||||
|
||||
stralloc_cats(&page, aha_data);
|
||||
free(aha_data);
|
||||
free(description);
|
||||
free(filename);
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
#include <sys/utsname.h>
|
||||
#include <sys/stat.h>
|
||||
#include <iconv.h>
|
||||
|
||||
#include "www_tree.h"
|
||||
#include "jamlib/jam.h"
|
||||
#include "libuuid/uuid.h"
|
||||
|
||||
@@ -15,9 +15,8 @@
|
||||
|
||||
#define IN 0
|
||||
#define OUT 1
|
||||
extern char *aha(char *input);
|
||||
extern struct bbs_config conf;
|
||||
|
||||
extern struct www_tag * aha(char *input, struct www_tag *parent);
|
||||
static char *www_wordwrap(char *content, int cutoff);
|
||||
char *www_sanitize(char *inp) {
|
||||
int i;
|
||||
@@ -241,7 +240,6 @@ char *www_msgs_messageview(struct user_record *user, int conference, int area, i
|
||||
char *to_s;
|
||||
int l1, l2;
|
||||
char *aha_text;
|
||||
char *aha_out;
|
||||
char *nodename;
|
||||
struct fido_addr *nodeno;
|
||||
|
||||
@@ -421,10 +419,13 @@ char *www_msgs_messageview(struct user_record *user, int conference, int area, i
|
||||
stralloc_cats(&page, "<div id=\"msgbody\">\n");
|
||||
|
||||
aha_text = strndup(body, jmh.TxtLen);
|
||||
aha_out = aha(aha_text);
|
||||
stralloc_cats(&page, aha_out);
|
||||
|
||||
free(aha_out);
|
||||
struct www_tag *aha_out = www_tag_new(NULL, "");
|
||||
aha(aha_text, aha_out);
|
||||
|
||||
char *aha_data = www_tag_unwravel(aha_out);
|
||||
|
||||
stralloc_cats(&page, aha_data);
|
||||
free(aha_data);
|
||||
free(aha_text);
|
||||
|
||||
stralloc_cats(&page, "</div>\n");
|
||||
|
526
src/www_tree.c
526
src/www_tree.c
@@ -28,12 +28,528 @@ struct www_tag *www_tag_new(char *tag, char *data) {
|
||||
case '>':
|
||||
stralloc_cats(&str, ">");
|
||||
break;
|
||||
case '\x01':
|
||||
stralloc_cats(&str, "☺");
|
||||
break;
|
||||
case '\x02':
|
||||
stralloc_cats(&str, "☻");
|
||||
break;
|
||||
case '\x03':
|
||||
stralloc_cats(&str, "♥");
|
||||
break;
|
||||
case '\x04':
|
||||
stralloc_cats(&str, "♦");
|
||||
break;
|
||||
case '\x05':
|
||||
stralloc_cats(&str, "♣");
|
||||
break;
|
||||
case '\x06':
|
||||
stralloc_cats(&str, "♠");
|
||||
break;
|
||||
case '\x07':
|
||||
stralloc_cats(&str, "•");
|
||||
break;
|
||||
case '\x08':
|
||||
stralloc_cats(&str, "◘");
|
||||
break;
|
||||
case '\x09':
|
||||
stralloc_cats(&str, "○");
|
||||
break;
|
||||
case '\x0b':
|
||||
stralloc_cats(&str, "♂");
|
||||
break;
|
||||
case '\x0c':
|
||||
stralloc_cats(&str, "♀");
|
||||
break;
|
||||
case '\x0e':
|
||||
stralloc_cats(&str, "♫");
|
||||
break;
|
||||
case '\x0f':
|
||||
stralloc_cats(&str, "☼");
|
||||
break;
|
||||
case '\x10':
|
||||
stralloc_cats(&str, "▸");
|
||||
break;
|
||||
case '\x11':
|
||||
stralloc_cats(&str, "◂");
|
||||
break;
|
||||
case '\x12':
|
||||
stralloc_cats(&str, "↕");
|
||||
break;
|
||||
case '\x13':
|
||||
stralloc_cats(&str, "‼");
|
||||
break;
|
||||
case '\x14':
|
||||
stralloc_cats(&str, "¶");
|
||||
break;
|
||||
case '\x15':
|
||||
stralloc_cats(&str, "§");
|
||||
break;
|
||||
case '\x16':
|
||||
stralloc_cats(&str, "▬");
|
||||
break;
|
||||
case '\x17':
|
||||
stralloc_cats(&str, "↨");
|
||||
break;
|
||||
case '\x18':
|
||||
stralloc_cats(&str, "↑");
|
||||
break;
|
||||
case '\x19':
|
||||
stralloc_cats(&str, "↓");
|
||||
break;
|
||||
case '\x1a':
|
||||
stralloc_cats(&str, "→");
|
||||
break;
|
||||
case '\x1b':
|
||||
stralloc_cats(&str, "←");
|
||||
break;
|
||||
case '\x1c':
|
||||
stralloc_cats(&str, "∟");
|
||||
break;
|
||||
case '\x1d':
|
||||
stralloc_cats(&str, "↔");
|
||||
break;
|
||||
case '\x1e':
|
||||
stralloc_cats(&str, "▴");
|
||||
break;
|
||||
case '\x1f':
|
||||
stralloc_cats(&str, "▾");
|
||||
break;
|
||||
case '\x21':
|
||||
stralloc_cats(&str, "!");
|
||||
break;
|
||||
case '\x22':
|
||||
stralloc_cats(&str, """);
|
||||
break;
|
||||
case '\x23':
|
||||
stralloc_cats(&str, "#");
|
||||
break;
|
||||
case '\x24':
|
||||
stralloc_cats(&str, "$");
|
||||
break;
|
||||
case '\x25':
|
||||
stralloc_cats(&str, "%");
|
||||
break;
|
||||
case '\x27':
|
||||
stralloc_cats(&str, "'");
|
||||
break;
|
||||
case '\x28':
|
||||
stralloc_cats(&str, "(");
|
||||
break;
|
||||
case '\x29':
|
||||
stralloc_cats(&str, ")");
|
||||
break;
|
||||
case '\x2a':
|
||||
stralloc_cats(&str, "*");
|
||||
break;
|
||||
case '\x2b':
|
||||
stralloc_cats(&str, "+");
|
||||
break;
|
||||
case '\x2c':
|
||||
stralloc_cats(&str, ",");
|
||||
break;
|
||||
case '\x2d':
|
||||
stralloc_cats(&str, "-");
|
||||
break;
|
||||
case '\x2e':
|
||||
stralloc_cats(&str, ".");
|
||||
break;
|
||||
case '\x2f':
|
||||
stralloc_cats(&str, "/");
|
||||
break;
|
||||
case '\x7f':
|
||||
stralloc_cats(&str, "⌂");
|
||||
break;
|
||||
case '\x80':
|
||||
stralloc_cats(&str, "Ç");
|
||||
break;
|
||||
case '\x81':
|
||||
stralloc_cats(&str, "ü");
|
||||
break;
|
||||
case '\x82':
|
||||
stralloc_cats(&str, "é");
|
||||
break;
|
||||
case '\x83':
|
||||
stralloc_cats(&str, "â");
|
||||
break;
|
||||
case '\x84':
|
||||
stralloc_cats(&str, "ä");
|
||||
break;
|
||||
case '\x85':
|
||||
stralloc_cats(&str, "à");
|
||||
break;
|
||||
case '\x86':
|
||||
stralloc_cats(&str, "å");
|
||||
break;
|
||||
case '\x87':
|
||||
stralloc_cats(&str, "ç");
|
||||
break;
|
||||
case '\x88':
|
||||
stralloc_cats(&str, "ê");
|
||||
break;
|
||||
case '\x89':
|
||||
stralloc_cats(&str, "ë");
|
||||
break;
|
||||
case '\x8a':
|
||||
stralloc_cats(&str, "è");
|
||||
break;
|
||||
case '\x8b':
|
||||
stralloc_cats(&str, "ï");
|
||||
break;
|
||||
case '\x8c':
|
||||
stralloc_cats(&str, "î");
|
||||
break;
|
||||
case '\x8d':
|
||||
stralloc_cats(&str, "ì");
|
||||
break;
|
||||
case '\x8e':
|
||||
stralloc_cats(&str, "Ä");
|
||||
break;
|
||||
case '\x8f':
|
||||
stralloc_cats(&str, "Å");
|
||||
break;
|
||||
case '\x90':
|
||||
stralloc_cats(&str, "É");
|
||||
break;
|
||||
case '\x91':
|
||||
stralloc_cats(&str, "æ");
|
||||
break;
|
||||
case '\x92':
|
||||
stralloc_cats(&str, "Æ");
|
||||
break;
|
||||
case '\x93':
|
||||
stralloc_cats(&str, "ô");
|
||||
break;
|
||||
case '\x94':
|
||||
stralloc_cats(&str, "ö");
|
||||
break;
|
||||
case '\x95':
|
||||
stralloc_cats(&str, "ò");
|
||||
break;
|
||||
case '\x96':
|
||||
stralloc_cats(&str, "û");
|
||||
break;
|
||||
case '\x97':
|
||||
stralloc_cats(&str, "ù");
|
||||
break;
|
||||
case '\x98':
|
||||
stralloc_cats(&str, "ÿ");
|
||||
break;
|
||||
case '\x99':
|
||||
stralloc_cats(&str, "Ö");
|
||||
break;
|
||||
case '\x9a':
|
||||
stralloc_cats(&str, "Ü");
|
||||
break;
|
||||
case '\x9b':
|
||||
stralloc_cats(&str, "¢");
|
||||
break;
|
||||
case '\x9c':
|
||||
stralloc_cats(&str, "£");
|
||||
break;
|
||||
case '\x9d':
|
||||
stralloc_cats(&str, "¥");
|
||||
break;
|
||||
case '\x9e':
|
||||
stralloc_cats(&str, "₧");
|
||||
break;
|
||||
case '\x9f':
|
||||
stralloc_cats(&str, "ƒ");
|
||||
break;
|
||||
case '\xa0':
|
||||
stralloc_cats(&str, "á");
|
||||
break;
|
||||
case '\xa1':
|
||||
stralloc_cats(&str, "í");
|
||||
break;
|
||||
case '\xa2':
|
||||
stralloc_cats(&str, "ó");
|
||||
break;
|
||||
case '\xa3':
|
||||
stralloc_cats(&str, "ú");
|
||||
break;
|
||||
case '\xa4':
|
||||
stralloc_cats(&str, "ñ");
|
||||
break;
|
||||
case '\xa5':
|
||||
stralloc_cats(&str, "Ñ");
|
||||
break;
|
||||
case '\xa6':
|
||||
stralloc_cats(&str, "ª");
|
||||
break;
|
||||
case '\xa7':
|
||||
stralloc_cats(&str, "º");
|
||||
break;
|
||||
case '\xa8':
|
||||
stralloc_cats(&str, "¿");
|
||||
break;
|
||||
case '\xa9':
|
||||
stralloc_cats(&str, "⌐");
|
||||
break;
|
||||
case '\xaa':
|
||||
stralloc_cats(&str, "¬");
|
||||
break;
|
||||
case '\xab':
|
||||
stralloc_cats(&str, "½");
|
||||
break;
|
||||
case '\xac':
|
||||
stralloc_cats(&str, "¼");
|
||||
break;
|
||||
case '\xad':
|
||||
stralloc_cats(&str, "¡");
|
||||
break;
|
||||
case '\xae':
|
||||
stralloc_cats(&str, "«");
|
||||
break;
|
||||
case '\xaf':
|
||||
stralloc_cats(&str, "»");
|
||||
break;
|
||||
case '\xb0':
|
||||
stralloc_cats(&str, "░");
|
||||
break;
|
||||
case '\xb1':
|
||||
stralloc_cats(&str, "▒");
|
||||
break;
|
||||
case '\xb2':
|
||||
stralloc_cats(&str, "▓");
|
||||
break;
|
||||
case '\xb3':
|
||||
stralloc_cats(&str, "│");
|
||||
break;
|
||||
case '\xb4':
|
||||
stralloc_cats(&str, "┤");
|
||||
break;
|
||||
case '\xb5':
|
||||
stralloc_cats(&str, "╡");
|
||||
break;
|
||||
case '\xb6':
|
||||
stralloc_cats(&str, "╢");
|
||||
break;
|
||||
case '\xb7':
|
||||
stralloc_cats(&str, "╖");
|
||||
break;
|
||||
case '\xb8':
|
||||
stralloc_cats(&str, "╕");
|
||||
break;
|
||||
case '\xb9':
|
||||
stralloc_cats(&str, "╣");
|
||||
break;
|
||||
case '\xba':
|
||||
stralloc_cats(&str, "║");
|
||||
break;
|
||||
case '\xbb':
|
||||
stralloc_cats(&str, "╗");
|
||||
break;
|
||||
case '\xbc':
|
||||
stralloc_cats(&str, "╝");
|
||||
break;
|
||||
case '\xbd':
|
||||
stralloc_cats(&str, "╜");
|
||||
break;
|
||||
case '\xbe':
|
||||
stralloc_cats(&str, "╛");
|
||||
break;
|
||||
case '\xbf':
|
||||
stralloc_cats(&str, "┐");
|
||||
break;
|
||||
case '\xc0':
|
||||
stralloc_cats(&str, "└");
|
||||
break;
|
||||
case '\xc1':
|
||||
stralloc_cats(&str, "┴");
|
||||
break;
|
||||
case '\xc2':
|
||||
stralloc_cats(&str, "┬");
|
||||
break;
|
||||
case '\xc3':
|
||||
stralloc_cats(&str, "├");
|
||||
break;
|
||||
case '\xc4':
|
||||
stralloc_cats(&str, "─");
|
||||
break;
|
||||
case '\xc5':
|
||||
stralloc_cats(&str, "┼");
|
||||
break;
|
||||
case '\xc6':
|
||||
stralloc_cats(&str, "╞");
|
||||
break;
|
||||
case '\xc7':
|
||||
stralloc_cats(&str, "╟");
|
||||
break;
|
||||
case '\xc8':
|
||||
stralloc_cats(&str, "╚");
|
||||
break;
|
||||
case '\xc9':
|
||||
stralloc_cats(&str, "╔");
|
||||
break;
|
||||
case '\xca':
|
||||
stralloc_cats(&str, "╩");
|
||||
break;
|
||||
case '\xcb':
|
||||
stralloc_cats(&str, "╦");
|
||||
break;
|
||||
case '\xcc':
|
||||
stralloc_cats(&str, "╠");
|
||||
break;
|
||||
case '\xcd':
|
||||
stralloc_cats(&str, "═");
|
||||
break;
|
||||
case '\xce':
|
||||
stralloc_cats(&str, "╬");
|
||||
break;
|
||||
case '\xcf':
|
||||
stralloc_cats(&str, "╧");
|
||||
break;
|
||||
case '\xd0':
|
||||
stralloc_cats(&str, "╨");
|
||||
break;
|
||||
case '\xd1':
|
||||
stralloc_cats(&str, "╤");
|
||||
break;
|
||||
case '\xd2':
|
||||
stralloc_cats(&str, "╥");
|
||||
break;
|
||||
case '\xd3':
|
||||
stralloc_cats(&str, "╙");
|
||||
break;
|
||||
case '\xd4':
|
||||
stralloc_cats(&str, "╛");
|
||||
break;
|
||||
case '\xd5':
|
||||
stralloc_cats(&str, "╒");
|
||||
break;
|
||||
case '\xd6':
|
||||
stralloc_cats(&str, "╓");
|
||||
break;
|
||||
case '\xd7':
|
||||
stralloc_cats(&str, "╫");
|
||||
break;
|
||||
case '\xd8':
|
||||
stralloc_cats(&str, "╪");
|
||||
break;
|
||||
case '\xd9':
|
||||
stralloc_cats(&str, "┘");
|
||||
break;
|
||||
case '\xda':
|
||||
stralloc_cats(&str, "┌");
|
||||
break;
|
||||
case '\xdb':
|
||||
stralloc_cats(&str, "█");
|
||||
break;
|
||||
case '\xdc':
|
||||
stralloc_cats(&str, "▄");
|
||||
break;
|
||||
case '\xdd':
|
||||
stralloc_cats(&str, "▌");
|
||||
break;
|
||||
case '\xde':
|
||||
stralloc_cats(&str, "▐");
|
||||
break;
|
||||
case '\xdf':
|
||||
stralloc_cats(&str, "▀");
|
||||
break;
|
||||
case '\xe0':
|
||||
stralloc_cats(&str, "α");
|
||||
break;
|
||||
case '\xe1':
|
||||
stralloc_cats(&str, "β");
|
||||
break;
|
||||
case '\xe2':
|
||||
stralloc_cats(&str, "Γ");
|
||||
break;
|
||||
case '\xe3':
|
||||
stralloc_cats(&str, "π");
|
||||
break;
|
||||
case '\xe4':
|
||||
stralloc_cats(&str, "Σ");
|
||||
break;
|
||||
case '\xe5':
|
||||
stralloc_cats(&str, "σ");
|
||||
break;
|
||||
case '\xe6':
|
||||
stralloc_cats(&str, "µ");
|
||||
break;
|
||||
case '\xe7':
|
||||
stralloc_cats(&str, "τ");
|
||||
break;
|
||||
case '\xe8':
|
||||
stralloc_cats(&str, "Φ");
|
||||
break;
|
||||
case '\xe9':
|
||||
stralloc_cats(&str, "Θ");
|
||||
break;
|
||||
case '\xea':
|
||||
stralloc_cats(&str, "Ω");
|
||||
break;
|
||||
case '\xeb':
|
||||
stralloc_cats(&str, "δ");
|
||||
break;
|
||||
case '\xec':
|
||||
stralloc_cats(&str, "∞");
|
||||
break;
|
||||
case '\xed':
|
||||
stralloc_cats(&str, "∅");
|
||||
break;
|
||||
case '\xee':
|
||||
stralloc_cats(&str, "∈");
|
||||
break;
|
||||
case '\xef':
|
||||
stralloc_cats(&str, "∩");
|
||||
break;
|
||||
case '\xf0':
|
||||
stralloc_cats(&str, "≡");
|
||||
break;
|
||||
case '\xf1':
|
||||
stralloc_cats(&str, "±");
|
||||
break;
|
||||
case '\xf2':
|
||||
stralloc_cats(&str, "≥");
|
||||
break;
|
||||
case '\xf3':
|
||||
stralloc_cats(&str, "≤");
|
||||
break;
|
||||
case '\xf4':
|
||||
stralloc_cats(&str, "⌠");
|
||||
break;
|
||||
case '\xf5':
|
||||
stralloc_cats(&str, "⌡");
|
||||
break;
|
||||
case '\xf6':
|
||||
stralloc_cats(&str, "÷");
|
||||
break;
|
||||
case '\xf7':
|
||||
stralloc_cats(&str, "≈");
|
||||
break;
|
||||
case '\xf8':
|
||||
stralloc_cats(&str, "°");
|
||||
break;
|
||||
case '\xf9':
|
||||
stralloc_cats(&str, "∙");
|
||||
break;
|
||||
case '\xfa':
|
||||
stralloc_cats(&str, "·");
|
||||
break;
|
||||
case '\xfb':
|
||||
stralloc_cats(&str, "√");
|
||||
break;
|
||||
case '\xfc':
|
||||
stralloc_cats(&str, "ⁿ");
|
||||
break;
|
||||
case '\xfd':
|
||||
stralloc_cats(&str, "²");
|
||||
break;
|
||||
case '\xfe':
|
||||
stralloc_cats(&str, "▪");
|
||||
break;
|
||||
case ' ':
|
||||
stralloc_cats(&str, " ");
|
||||
break;
|
||||
default:
|
||||
stralloc_append1(&str, *p);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
stralloc_0(&str);
|
||||
new_tag->data = str.s;
|
||||
} else {
|
||||
new_tag->tag = strdup(tag);
|
||||
@@ -48,6 +564,14 @@ struct www_tag *www_tag_new(char *tag, char *data) {
|
||||
return new_tag;
|
||||
}
|
||||
|
||||
struct www_tag *www_tag_duplicate(struct www_tag *oldtag) {
|
||||
struct www_tag *newtag = www_tag_new(oldtag->tag, oldtag->data);
|
||||
for (int i=0;i<oldtag->attribs.len;i++) {
|
||||
www_tag_add_attrib(newtag, strdup(ptr_vector_get(&oldtag->attribs, i)), strdup(ptr_vector_get(&oldtag->values, i)));
|
||||
}
|
||||
return newtag;
|
||||
}
|
||||
|
||||
void www_tag_add_attrib(struct www_tag *tag, char *attrib, char *value) {
|
||||
ptr_vector_append(&tag->attribs, strdup(attrib));
|
||||
ptr_vector_append(&tag->values, strdup(value));
|
||||
|
@@ -15,6 +15,7 @@ struct www_tag {
|
||||
|
||||
extern struct www_tag *www_tag_new(char *tag, char *data);
|
||||
extern void www_tag_add_attrib(struct www_tag *tag, char *attrib, char *value);
|
||||
extern struct www_tag *www_tag_duplicate(struct www_tag *oldtag);
|
||||
extern void www_tag_add_child(struct www_tag *tag, struct www_tag *child);
|
||||
extern char *www_tag_unwravel(struct www_tag *tag);
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user