Rewrite aha to work with new tree system ready for messages and files

This commit is contained in:
Andrew Pamment
2018-10-21 23:05:17 +10:00
parent 71b465eba2
commit 947d4ab37f
5 changed files with 653 additions and 272 deletions

View File

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

View File

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

View File

@@ -28,12 +28,528 @@ struct www_tag *www_tag_new(char *tag, char *data) {
case '>':
stralloc_cats(&str, "&gt;");
break;
case '\x01':
stralloc_cats(&str, "&#x263A;");
break;
case '\x02':
stralloc_cats(&str, "&#x263B;");
break;
case '\x03':
stralloc_cats(&str, "&#x2665;");
break;
case '\x04':
stralloc_cats(&str, "&#x2666;");
break;
case '\x05':
stralloc_cats(&str, "&#x2663;");
break;
case '\x06':
stralloc_cats(&str, "&#x2660;");
break;
case '\x07':
stralloc_cats(&str, "&#x2022;");
break;
case '\x08':
stralloc_cats(&str, "&#x25D8;");
break;
case '\x09':
stralloc_cats(&str, "&#x25CB;");
break;
case '\x0b':
stralloc_cats(&str, "&#x2642;");
break;
case '\x0c':
stralloc_cats(&str, "&#x2640;");
break;
case '\x0e':
stralloc_cats(&str, "&#x266B;");
break;
case '\x0f':
stralloc_cats(&str, "&#x263C;");
break;
case '\x10':
stralloc_cats(&str, "&#x25B8;");
break;
case '\x11':
stralloc_cats(&str, "&#x25C2;");
break;
case '\x12':
stralloc_cats(&str, "&#x2195;");
break;
case '\x13':
stralloc_cats(&str, "&#x203C;");
break;
case '\x14':
stralloc_cats(&str, "&#x00B6;");
break;
case '\x15':
stralloc_cats(&str, "&#x00A7;");
break;
case '\x16':
stralloc_cats(&str, "&#x25AC;");
break;
case '\x17':
stralloc_cats(&str, "&#x21A8;");
break;
case '\x18':
stralloc_cats(&str, "&#x2191;");
break;
case '\x19':
stralloc_cats(&str, "&#x2193;");
break;
case '\x1a':
stralloc_cats(&str, "&#x2192;");
break;
case '\x1b':
stralloc_cats(&str, "&#x2190;");
break;
case '\x1c':
stralloc_cats(&str, "&#x221F;");
break;
case '\x1d':
stralloc_cats(&str, "&#x2194;");
break;
case '\x1e':
stralloc_cats(&str, "&#x25B4;");
break;
case '\x1f':
stralloc_cats(&str, "&#x25BE;");
break;
case '\x21':
stralloc_cats(&str, "&#x0021;");
break;
case '\x22':
stralloc_cats(&str, "&#x0022;");
break;
case '\x23':
stralloc_cats(&str, "&#x0023;");
break;
case '\x24':
stralloc_cats(&str, "&#x0024;");
break;
case '\x25':
stralloc_cats(&str, "&#x0025;");
break;
case '\x27':
stralloc_cats(&str, "&#x0027;");
break;
case '\x28':
stralloc_cats(&str, "&#x0028;");
break;
case '\x29':
stralloc_cats(&str, "&#x0029;");
break;
case '\x2a':
stralloc_cats(&str, "&#x002A;");
break;
case '\x2b':
stralloc_cats(&str, "&#x002B;");
break;
case '\x2c':
stralloc_cats(&str, "&#x002C;");
break;
case '\x2d':
stralloc_cats(&str, "&#x002D;");
break;
case '\x2e':
stralloc_cats(&str, "&#x002E;");
break;
case '\x2f':
stralloc_cats(&str, "&#x002F;");
break;
case '\x7f':
stralloc_cats(&str, "&#x2302;");
break;
case '\x80':
stralloc_cats(&str, "&#x00C7;");
break;
case '\x81':
stralloc_cats(&str, "&#x00FC;");
break;
case '\x82':
stralloc_cats(&str, "&#x00E9;");
break;
case '\x83':
stralloc_cats(&str, "&#x00E2;");
break;
case '\x84':
stralloc_cats(&str, "&#x00E4;");
break;
case '\x85':
stralloc_cats(&str, "&#x00E0;");
break;
case '\x86':
stralloc_cats(&str, "&#x00E5;");
break;
case '\x87':
stralloc_cats(&str, "&#x00E7;");
break;
case '\x88':
stralloc_cats(&str, "&#x00EA;");
break;
case '\x89':
stralloc_cats(&str, "&#x00EB;");
break;
case '\x8a':
stralloc_cats(&str, "&#x00E8;");
break;
case '\x8b':
stralloc_cats(&str, "&#x00EF;");
break;
case '\x8c':
stralloc_cats(&str, "&#x00EE;");
break;
case '\x8d':
stralloc_cats(&str, "&#x00EC;");
break;
case '\x8e':
stralloc_cats(&str, "&#x00C4;");
break;
case '\x8f':
stralloc_cats(&str, "&#x00C5;");
break;
case '\x90':
stralloc_cats(&str, "&#x00C9;");
break;
case '\x91':
stralloc_cats(&str, "&#x00E6;");
break;
case '\x92':
stralloc_cats(&str, "&#x00C6;");
break;
case '\x93':
stralloc_cats(&str, "&#x00F4;");
break;
case '\x94':
stralloc_cats(&str, "&#x00F6;");
break;
case '\x95':
stralloc_cats(&str, "&#x00F2;");
break;
case '\x96':
stralloc_cats(&str, "&#x00FB;");
break;
case '\x97':
stralloc_cats(&str, "&#x00F9;");
break;
case '\x98':
stralloc_cats(&str, "&#x00FF;");
break;
case '\x99':
stralloc_cats(&str, "&#x00D6;");
break;
case '\x9a':
stralloc_cats(&str, "&#x00DC;");
break;
case '\x9b':
stralloc_cats(&str, "&#x00A2;");
break;
case '\x9c':
stralloc_cats(&str, "&#x00A3;");
break;
case '\x9d':
stralloc_cats(&str, "&#x00A5;");
break;
case '\x9e':
stralloc_cats(&str, "&#x20A7;");
break;
case '\x9f':
stralloc_cats(&str, "&#x0192;");
break;
case '\xa0':
stralloc_cats(&str, "&#x00E1;");
break;
case '\xa1':
stralloc_cats(&str, "&#x00ED;");
break;
case '\xa2':
stralloc_cats(&str, "&#x00F3;");
break;
case '\xa3':
stralloc_cats(&str, "&#x00FA;");
break;
case '\xa4':
stralloc_cats(&str, "&#x00F1;");
break;
case '\xa5':
stralloc_cats(&str, "&#x00D1;");
break;
case '\xa6':
stralloc_cats(&str, "&#x00AA;");
break;
case '\xa7':
stralloc_cats(&str, "&#x00BA;");
break;
case '\xa8':
stralloc_cats(&str, "&#x00BF;");
break;
case '\xa9':
stralloc_cats(&str, "&#x2310;");
break;
case '\xaa':
stralloc_cats(&str, "&#x00AC;");
break;
case '\xab':
stralloc_cats(&str, "&#x00BD;");
break;
case '\xac':
stralloc_cats(&str, "&#x00BC;");
break;
case '\xad':
stralloc_cats(&str, "&#x00A1;");
break;
case '\xae':
stralloc_cats(&str, "&#x00AB;");
break;
case '\xaf':
stralloc_cats(&str, "&#x00BB;");
break;
case '\xb0':
stralloc_cats(&str, "&#x2591;");
break;
case '\xb1':
stralloc_cats(&str, "&#x2592;");
break;
case '\xb2':
stralloc_cats(&str, "&#x2593;");
break;
case '\xb3':
stralloc_cats(&str, "&#x2502;");
break;
case '\xb4':
stralloc_cats(&str, "&#x2524;");
break;
case '\xb5':
stralloc_cats(&str, "&#x2561;");
break;
case '\xb6':
stralloc_cats(&str, "&#x2562;");
break;
case '\xb7':
stralloc_cats(&str, "&#x2556;");
break;
case '\xb8':
stralloc_cats(&str, "&#x2555;");
break;
case '\xb9':
stralloc_cats(&str, "&#x2563;");
break;
case '\xba':
stralloc_cats(&str, "&#x2551;");
break;
case '\xbb':
stralloc_cats(&str, "&#x2557;");
break;
case '\xbc':
stralloc_cats(&str, "&#x255D;");
break;
case '\xbd':
stralloc_cats(&str, "&#x255C;");
break;
case '\xbe':
stralloc_cats(&str, "&#x255B;");
break;
case '\xbf':
stralloc_cats(&str, "&#x2510;");
break;
case '\xc0':
stralloc_cats(&str, "&#x2514;");
break;
case '\xc1':
stralloc_cats(&str, "&#x2534;");
break;
case '\xc2':
stralloc_cats(&str, "&#x252C;");
break;
case '\xc3':
stralloc_cats(&str, "&#x251C;");
break;
case '\xc4':
stralloc_cats(&str, "&#x2500;");
break;
case '\xc5':
stralloc_cats(&str, "&#x253C;");
break;
case '\xc6':
stralloc_cats(&str, "&#x255E;");
break;
case '\xc7':
stralloc_cats(&str, "&#x255F;");
break;
case '\xc8':
stralloc_cats(&str, "&#x255A;");
break;
case '\xc9':
stralloc_cats(&str, "&#x2554;");
break;
case '\xca':
stralloc_cats(&str, "&#x2569;");
break;
case '\xcb':
stralloc_cats(&str, "&#x2566;");
break;
case '\xcc':
stralloc_cats(&str, "&#x2560;");
break;
case '\xcd':
stralloc_cats(&str, "&#x2550;");
break;
case '\xce':
stralloc_cats(&str, "&#x256C;");
break;
case '\xcf':
stralloc_cats(&str, "&#x2567;");
break;
case '\xd0':
stralloc_cats(&str, "&#x2568;");
break;
case '\xd1':
stralloc_cats(&str, "&#x2564;");
break;
case '\xd2':
stralloc_cats(&str, "&#x2565;");
break;
case '\xd3':
stralloc_cats(&str, "&#x2559;");
break;
case '\xd4':
stralloc_cats(&str, "&#x255B;");
break;
case '\xd5':
stralloc_cats(&str, "&#x2552;");
break;
case '\xd6':
stralloc_cats(&str, "&#x2553;");
break;
case '\xd7':
stralloc_cats(&str, "&#x256B;");
break;
case '\xd8':
stralloc_cats(&str, "&#x256A;");
break;
case '\xd9':
stralloc_cats(&str, "&#x2518;");
break;
case '\xda':
stralloc_cats(&str, "&#x250C;");
break;
case '\xdb':
stralloc_cats(&str, "&#x2588;");
break;
case '\xdc':
stralloc_cats(&str, "&#x2584;");
break;
case '\xdd':
stralloc_cats(&str, "&#x258C;");
break;
case '\xde':
stralloc_cats(&str, "&#x2590;");
break;
case '\xdf':
stralloc_cats(&str, "&#x2580;");
break;
case '\xe0':
stralloc_cats(&str, "&#x03B1;");
break;
case '\xe1':
stralloc_cats(&str, "&#x03B2;");
break;
case '\xe2':
stralloc_cats(&str, "&#x0393;");
break;
case '\xe3':
stralloc_cats(&str, "&#x03C0;");
break;
case '\xe4':
stralloc_cats(&str, "&#x03A3;");
break;
case '\xe5':
stralloc_cats(&str, "&#x03C3;");
break;
case '\xe6':
stralloc_cats(&str, "&#x00B5;");
break;
case '\xe7':
stralloc_cats(&str, "&#x03C4;");
break;
case '\xe8':
stralloc_cats(&str, "&#x03A6;");
break;
case '\xe9':
stralloc_cats(&str, "&#x0398;");
break;
case '\xea':
stralloc_cats(&str, "&#x03A9;");
break;
case '\xeb':
stralloc_cats(&str, "&#x03B4;");
break;
case '\xec':
stralloc_cats(&str, "&#x221E;");
break;
case '\xed':
stralloc_cats(&str, "&#x2205;");
break;
case '\xee':
stralloc_cats(&str, "&#x2208;");
break;
case '\xef':
stralloc_cats(&str, "&#x2229;");
break;
case '\xf0':
stralloc_cats(&str, "&#x2261;");
break;
case '\xf1':
stralloc_cats(&str, "&#x00B1;");
break;
case '\xf2':
stralloc_cats(&str, "&#x2265;");
break;
case '\xf3':
stralloc_cats(&str, "&#x2264;");
break;
case '\xf4':
stralloc_cats(&str, "&#x2320;");
break;
case '\xf5':
stralloc_cats(&str, "&#x2321;");
break;
case '\xf6':
stralloc_cats(&str, "&#x00F7;");
break;
case '\xf7':
stralloc_cats(&str, "&#x2248;");
break;
case '\xf8':
stralloc_cats(&str, "&#x00B0;");
break;
case '\xf9':
stralloc_cats(&str, "&#x2219;");
break;
case '\xfa':
stralloc_cats(&str, "&#x00B7;");
break;
case '\xfb':
stralloc_cats(&str, "&#x221A;");
break;
case '\xfc':
stralloc_cats(&str, "&#x207F;");
break;
case '\xfd':
stralloc_cats(&str, "&#x00B2;");
break;
case '\xfe':
stralloc_cats(&str, "&#x25AA;");
break;
case ' ':
stralloc_cats(&str, "&nbsp;");
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));

View File

@@ -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