예제 #1
0
/* print_opml_node -- convert given node to OPML and append */
void print_opml_node(GString *out, node *n, scratch_pad *scratch) {
#ifdef DEBUG_ON
	fprintf(stderr, "print_opml_node: %d\n",n->key);
#endif
	switch (n->key) {
		case METADATA:
			/* Metadata is present, so will need to be appended later */
			break;
		case METAKEY:
			g_string_append_printf(out, "<outline text=\"");
			print_opml_string(out, n->str);
			g_string_append_printf(out, "\" _note=\"");
			trim_trailing_newlines(n->children->str);
			print_opml_string(out, n->children->str);
			g_string_append_printf(out, "\"/>");
			break;
		case HEADINGSECTION:
			/* Need to handle "nesting" properly */
			g_string_append_printf(out, "<outline ");

			/* Print header */
			print_opml_node(out, n->children, scratch);

			/* print remainder of paragraphs as note */
			g_string_append_printf(out, " _note=\"");
			print_opml_node_tree(out, n->children->next, scratch);
			g_string_append_printf(out, "\">");
			break;
		case H1: case H2: case H3: case H4: case H5: case H6: 
			g_string_append_printf(out, "text=\"");
			print_opml_string(out, n->str);
			g_string_append_printf(out,"\"");
			break;
		case VERBATIM:
		case VERBATIMFENCE:
			print_opml_string(out, n->str);
			break;
		case SPACE:
			print_opml_string(out, n->str);
			break;
		case STR:
			print_opml_string(out, n->str);
			break;
		case LINEBREAK:
			g_string_append_printf(out, "  &#10;");
			break;
		case PLAIN:
			print_opml_node_tree(out, n->children, scratch);
			if ((n->next != NULL) && (n->next->key == PLAIN)) {
				g_string_append_printf(out, "&#10;");
			}
			break;
		default: 
			fprintf(stderr, "print_opml_node encountered unknown element key = %d\n", n->key);
			exit(EXIT_FAILURE);
	}
#ifdef DEBUG_ON
	fprintf(stderr, "finish print_opml_node: %d\n", n->key);
#endif
}
예제 #2
0
/* end_opml_output -- close the document */
void end_opml_output(GString *out, node* list, scratch_pad *scratch) {
#ifdef DEBUG_ON
	fprintf(stderr, "end_opml_output\n");
#endif
	if (tree_contains_key(list, METAKEY)) {
		g_string_append_printf(out, "<outline text=\"Metadata\">\n");
		print_opml_node_tree(out, list->children, scratch);
		g_string_append_printf(out, "</outline>");
	}
	g_string_append_printf(out, "</body>\n</opml>");
}
예제 #3
0
/* export_node_tree -- given a tree, export as specified format */
char * export_node_tree(node *list, int format, unsigned long extensions) {
	char *output;
	char *temp;
	GString *out = g_string_new("");
	scratch_pad *scratch = mk_scratch_pad(extensions);
	scratch->result_tree = list;  /* Pointer to result tree to use later */

#ifdef DEBUG_ON
	fprintf(stderr, "export_node_tree\n");
#endif

#ifdef DEBUG_ON
	fprintf(stderr, "extract_references\n");
#endif

	if ((format != OPML_FORMAT) &&
		(format != CRITIC_ACCEPT_FORMAT) &&
		(format != CRITIC_REJECT_FORMAT) &&
		(format != CRITIC_HTML_HIGHLIGHT_FORMAT)) {
			/* Find defined abbreviations */
			extract_abbreviations(list, scratch);
			/* Apply those abbreviations to source text */
			find_abbreviations(list, scratch);

			/* Parse for link, images, etc reference definitions */
			extract_references(list, scratch);
		}
	
	/* Change our desired format based on metadata */
	if (format == LATEX_FORMAT)
		format = find_latex_mode(format, list);
	
	switch (format) {
		case TEXT_FORMAT:
			print_text_node_tree(out, list, scratch);
			break;
		case HTML_FORMAT:
			if (scratch->extensions & EXT_COMPLETE) {
				temp = metavalue_for_key("lang", scratch->result_tree);
				if (temp != NULL) {
				    g_string_append_printf(out,
					"<!DOCTYPE html>\n<html lang=\"%s\">\n<head>\n\t<meta charset=\"utf-8\"/>\n",temp);
					free(temp);
				} else {
				    g_string_append_printf(out,
					"<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\"/>\n");
				}
			}
#ifdef DEBUG_ON
	fprintf(stderr, "print_html output\n");
#endif
			print_html_node_tree(out, list, scratch);
#ifdef DEBUG_ON
	fprintf(stderr, "print html endnotes\n");
#endif
			print_html_endnotes(out, scratch);
#ifdef DEBUG_ON
	fprintf(stderr, "finished printing html endnotes\n");
#endif
			if (scratch->extensions & EXT_COMPLETE) {
				pad(out,2, scratch);
				g_string_append_printf(out, "</body>\n</html>");
			}
#ifdef DEBUG_ON
	fprintf(stderr, "closed HTML document\n");
#endif
			break;
		case LATEX_FORMAT:
			if ((list != NULL) && (list->key != METADATA)) {
				print_latex_node_tree(out, scratch->abbreviations, scratch);
			}
			print_latex_node_tree(out, list, scratch);
			break;
		case MEMOIR_FORMAT:
			if ((list != NULL) && (list->key != METADATA)) {
				print_memoir_node_tree(out, scratch->abbreviations, scratch);
			}
			print_memoir_node_tree(out, list, scratch);
			break;
		case BEAMER_FORMAT:
			if ((list != NULL) && (list->key != METADATA)) {
				print_beamer_node_tree(out, scratch->abbreviations, scratch);
			}
			print_beamer_node_tree(out, list, scratch);
			break;
		case LYX_FORMAT:
			perform_lyx_output(out,list,scratch);
			break;
		case OPML_FORMAT:
#ifdef DEBUG_ON
	fprintf(stderr, "export OPML\n");
#endif
			begin_opml_output(out, list, scratch);
			print_opml_node_tree(out, list, scratch);
			end_opml_output(out, list, scratch);
			break;
		case ODF_FORMAT:
#ifdef DEBUG_ON
	fprintf(stderr, "export ODF\n");
#endif
			begin_odf_output(out, list, scratch);
			print_odf_node_tree(out, list, scratch);
			end_odf_output(out, list, scratch);
			break;
		case RTF_FORMAT:
#ifdef DEBUG_ON
	fprintf(stderr, "export RTF\n");
#endif
			if (!(scratch->extensions & EXT_SNIPPET))
				begin_rtf_output(out, list, scratch);
			print_rtf_node_tree(out, list, scratch);
			if (!(scratch->extensions & EXT_SNIPPET))
				end_rtf_output(out, list, scratch);
			break;
		case CRITIC_ACCEPT_FORMAT:
			print_critic_accept_node_tree(out, list, scratch);
			break;
		case CRITIC_REJECT_FORMAT:
			print_critic_reject_node_tree(out, list, scratch);
			break;
		case CRITIC_HTML_HIGHLIGHT_FORMAT:
			print_critic_html_highlight_node_tree(out, list, scratch);
			break;
		case TOC_FORMAT:
			scratch->toc_level = 0;
			print_toc_node_tree(out,list,scratch);
			break;
		default:
			fprintf(stderr, "Unknown export format = %d\n",format);
			exit(EXIT_FAILURE);
	}
	
	output = out->str;
	g_string_free(out, false);
	free_scratch_pad(scratch);

#ifdef DEBUG_ON
	fprintf(stderr, "finish export_node_tree\n");
#endif
	return output;
}
예제 #4
0
/* export_node_tree -- given a tree, export as specified format */
char * export_node_tree(node *list, int format, int extensions) {
	char *output;
	GString *out = g_string_new("");
	scratch_pad *scratch = mk_scratch_pad(extensions);

#ifdef DEBUG_ON
	fprintf(stderr, "export_node_tree\n");
#endif

#ifdef DEBUG_ON
	fprintf(stderr, "extract_references\n");
#endif
	/* Parse for link, images, etc reference definitions */
	if ((format != OPML_FORMAT) &&
		(format != CRITIC_ACCEPT_FORMAT) &&
		(format != CRITIC_REJECT_FORMAT) &&
		(format != CRITIC_HTML_HIGHLIGHT_FORMAT))
			extract_references(list, scratch);
	
	/* Change our desired format based on metadata */
	if (format == LATEX_FORMAT)
		format = find_latex_mode(format, list);
	
	switch (format) {
		case TEXT_FORMAT:
			print_text_node_tree(out, list, scratch);
			break;
		case HTML_FORMAT:
			if (scratch->extensions & EXT_COMPLETE) {
			    g_string_append_printf(out,
				"<!DOCTYPE html>\n<html>\n<head>\n\t<meta charset=\"utf-8\"/>\n");
			}
#ifdef DEBUG_ON
	fprintf(stderr, "print_html output\n");
#endif
			print_html_node_tree(out, list, scratch);
#ifdef DEBUG_ON
	fprintf(stderr, "print html endnotes\n");
#endif
			print_html_endnotes(out, scratch);
#ifdef DEBUG_ON
	fprintf(stderr, "finished printing html endnotes\n");
#endif
			if (scratch->extensions & EXT_COMPLETE) {
				pad(out,2, scratch);
				g_string_append_printf(out, "</body>\n</html>");
			}
#ifdef DEBUG_ON
	fprintf(stderr, "closed HTML document\n");
#endif
			break;
		case LATEX_FORMAT:
			print_latex_node_tree(out, list, scratch);
			break;
		case MEMOIR_FORMAT:
			print_memoir_node_tree(out, list, scratch);
			break;
		case BEAMER_FORMAT:
			print_beamer_node_tree(out, list, scratch);
			break;
		case OPML_FORMAT:
#ifdef DEBUG_ON
	fprintf(stderr, "export OPML\n");
#endif
			begin_opml_output(out, list, scratch);
			print_opml_node_tree(out, list, scratch);
			end_opml_output(out, list, scratch);
			break;
		case ODF_FORMAT:
#ifdef DEBUG_ON
	fprintf(stderr, "export ODF\n");
#endif
			begin_odf_output(out, list, scratch);
			print_odf_node_tree(out, list, scratch);
			end_odf_output(out, list, scratch);
			break;
		case CRITIC_ACCEPT_FORMAT:
			print_critic_accept_node_tree(out, list, scratch);
			break;
		case CRITIC_REJECT_FORMAT:
			print_critic_reject_node_tree(out, list, scratch);
			break;
		case CRITIC_HTML_HIGHLIGHT_FORMAT:
			print_critic_html_highlight_node_tree(out, list, scratch);
			break;
		default:
			fprintf(stderr, "Unknown export format = %d\n",format);
			exit(EXIT_FAILURE);
	}
	
	output = out->str;
	g_string_free(out, false);
	free_scratch_pad(scratch);

#ifdef DEBUG_ON
	fprintf(stderr, "finish export_node_tree\n");
#endif
	return output;
}