Пример #1
0
int WikiManage::wiki_parse_url_full_search(const char *url, char *flag, char *title, char **data)
{
	full_search_t *fs = &m_search_buf;
	
	int size, i = atoi(url);
	struct one_lang *p = wiki_full_search_find_lang(i);

	strcpy(flag, "1");
	strcpy(title, fs->key);

	if (p == NULL)
		return wiki_not_found(data, &size, "Not Found.");

	int len;
	sort_idx_t idx;

	if (p->index->wi_find(NULL, WK_INDEX_FIND, fs->page_idx[i], &idx, &len) == 0) {
		if ((len = p->data->wd_sys_read(idx.data_file_idx,
							idx.data_pos, idx.data_len, m_curr_content, _MAX_ONE_PAGE_SIZE)) > 0) {
			m_curr_content[len] = 0;

			if (m_wiki_config->wc_get_audio_flag()) {
				len = wiki_parse_audio_flag(m_curr_content, len, m_curr_page);
				memcpy(m_curr_content, m_curr_page, len);
				m_curr_content[len] = 0;
			}

			if (m_wiki_config->wc_get_need_translate()) {
				len = wiki_translate_format(m_curr_content, len, m_curr_page);
				memcpy(m_curr_content, m_curr_page, len);
				m_curr_content[len] = 0;
			}

			int size = convert_page_simple(m_curr_page, m_curr_content, len, fs->key);
			m_curr_page[size] = 0;

			char tmp[256];

			p->index->wi_get_key(&idx, tmp);
			m_curr_lang = p;
			wiki_push_back(STATUS_CONTENT, tmp, len, &idx);

			return wiki_not_found(data, &size, m_curr_page, size);
		}
	}

	return wiki_not_found(data, &size, "Not Found.");
}
Пример #2
0
int WikiManage::wiki_read_data(const sort_idx_t *p, char **buf, const char *title)
{
	char tmp[256];
	const char *key  = tmp;
	int n, pos, height;

	WikiData *wiki_data = CURR_WIKI(data);
	WikiIndex *wiki_index = CURR_WIKI(index);

	INIT_CURR_TITLE();

	if ((n = wiki_data->wd_sys_read((int)p->data_file_idx,
					p->data_pos, (int)p->data_len, m_curr_content, 2*1024*1024)) > 0) {

#if 0
		n = m_wiki_zh->wz_convert_2hans(m_curr_content, n, m_curr_page);
		memcpy(m_curr_content, m_curr_page, n);
		m_curr_content[n] = 0;
#endif

		m_curr_content[n] = 0;

		if (m_wiki_config->wc_get_need_translate()) {
			n = wiki_translate_format(m_curr_content, n, m_curr_page);
			memcpy(m_curr_content, m_curr_page, n);
			m_curr_content[n] = 0;
		}

		int split_total = wiki_split_content(n);

		if (title == NULL) {
			wiki_index->wi_get_key(p, tmp);
		} else {
			key = title;
		}
		SET_CURR_TITLE(key);

		wiki_find_key_pos(&pos, &height);

		int len;

		char bg[16], fg[16], link[16], bg_str[64];
		int font_size;

		m_wiki_config->wc_get_config(bg, fg, link, &font_size);

		sprintf(bg_str, "background:%s;\n", bg);

		/* TODO WIKI_START_HTML */
		len = sprintf(m_curr_page, WIKI_START_HTML,
				m_wiki_config->wc_get_body_image_flag() ? "" : bg_str ,
				fg, font_size, link, 
				m_wiki_socket->ws_get_bind_port(), pos, height, split_total - 1,
				m_wiki_config->wc_get_body_image_flag() ? " background=\"B.body.png\"" : "");

		memcpy(m_curr_page + len, m_curr_content + m_split_pos[0].start, m_split_pos[0].len);
		len += m_split_pos[0].len;

		len += sprintf(m_curr_page + len, WIKI_HTTP_END_HTML);

		*buf = m_curr_page;

		return len;
	}

	return 0;
}
Пример #3
0
int WikiManage::wiki_full_search_one_page(char **buf, int *size, int page)
{
	full_search_t *fs  = &m_search_buf;

	int last_page = fs->page_total / PAGE_TOTAL;

	if (fs->page_total % PAGE_TOTAL)
		last_page++;

	if (page < 1)
		page = 1;

	if (page > last_page)
		page = last_page;

	fs->curr_page = page;

	int len, pos = 0;
	struct one_lang *p;
	sort_idx_t idx;

	pos = sprintf(m_curr_page + pos, "<table border=0>\n");

	for (int i = PAGE_TOTAL * (page - 1); i < PAGE_TOTAL * page && i < fs->page_total; i++) {
		if ((p = wiki_full_search_find_lang(i)) == NULL)
			continue;

		if (p->index->wi_find(NULL, WK_INDEX_FIND, fs->page_idx[i], &idx, &len) == -1)
			continue;

		char title[128];

		p->index->wi_get_key(&idx, title);
		pos += sprintf(m_curr_page + pos, "<tr><td width=100%%>"
				"<a href='idx:%d'><font size=4>%s</font></a><br/>\n", i, title);

		int show_flag = m_wiki_config->wc_get_full_text_show();

		if (show_flag == FULL_TEXT_SHOW_SOME || show_flag == FULL_TEXT_SHOW_ALL) {
			if ((len = p->data->wd_sys_read(idx.data_file_idx, idx.data_pos, idx.data_len,
							m_curr_content, _MAX_ONE_PAGE_SIZE)) > 0) {
				m_curr_content[len] = 0;

				if (show_flag == FULL_TEXT_SHOW_SOME)
					len = convert_page_complex(m_buf, m_curr_content, len, fs->key);
				else {
					if (m_wiki_config->wc_get_audio_flag()) {
						len = wiki_parse_audio_flag(m_curr_content, len, m_buf);
						memcpy(m_curr_content, m_buf, len);
						m_curr_content[len] = 0;
					}

					if (m_wiki_config->wc_get_need_translate()) {
						len = wiki_translate_format(m_curr_content, len, m_buf);
						memcpy(m_curr_content, m_buf, len);
						m_curr_content[len] = 0;
					}
					len = convert_page_simple(m_buf, m_curr_content, len, fs->key);
				}
				memcpy(m_curr_page + pos, m_buf, len);
				pos += len;
			}
		}

		pos += sprintf(m_curr_page + pos, "%s", "<hr>\n</td</tr>\n");
	}

	pos += sprintf(m_curr_page + pos, "</table>\n");

	char next[1024] = "&nbsp;", before[1024] = "&nbsp;";

	if (page < last_page)
		sprintf(next, "<a href=\"page:%d\"><font size=4><b>&gt;&gt;&gt;&gt;&gt;</b></font></a>", page + 1);

	if (page > 1)
		sprintf(before, "<a href=\"page:%d\"><font size=4><b>&lt;&lt;&lt;&lt;&lt;</b></font></a>", page - 1);

	pos += sprintf(m_curr_page + pos, "<table border=0 width=100%%><tr>"
			"<td align=left width=40%%>%s</td>"
			"<td align=center width=20%%>%d/%d</td>"
			"<td align=right width=40%%>%s</td></tr></table>\n", before, page, last_page, next);

	m_curr_page[pos] = 0;

	return wiki_not_found(buf, size, m_curr_page, pos);
}