1 /* morla - Copyright (C) 2005-2007 bakunin - Andrea Marchesini
2  *                                      <bakunin@morlardf.net>
3  *
4  * This source code is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Public License as published
6  * by the Free Software Foundation; either version 2 of the License,
7  * or (at your option) any later version.
8  *
9  * This source code is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12  * Please refer to the GNU Public License for more details.
13  *
14  * You should have received a copy of the GNU Public License along with
15  * this source code; if not, write to:
16  * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18 
19 #include <glib.h>
20 #include <glib/gstdio.h>
21 
22 #include <gtk/gtk.h>
23 #include <gdk/gdkkeysyms.h>
24 
25 #include <nxml.h>
26 
27 #include <libxslt/transform.h>
28 #include <libxslt/xsltutils.h>
29 
30 #include <redland.h>
31 
32 #ifdef USE_GTKHTML
33 #  include <libgtkhtml/gtkhtml.h>
34 #endif
35 
36 #ifdef ENABLE_NLS
37 #  include <glib/gi18n-lib.h>
38 #else
39 #  define _(String) (String)
40 #endif
41 
42 #ifdef G_OS_UNIX
43 #  include <sys/utsname.h>
44 #endif
45 
46 #ifdef USE_JS
47 #  ifdef USE_NGS_JS
48 #    include <js.h>
49 #  elif USE_MOZILLA_JS
50 #    include <jsapi.h>
51 #  else
52 #    error "No javascript engine selected!"
53 #  endif
54 #endif
55 
56 #ifdef USE_GCONF
57 #  include <gconf/gconf-client.h>
58 #endif
59 
60 #include "morla-module.h"
61 
62 struct module_t
63 {
64   GModule *module;
65   MorlaModule *data;
66 };
67 
68 enum rdf_object_t
69 {
70   RDF_OBJECT_BLANK,
71   RDF_OBJECT_LITERAL,
72   RDF_OBJECT_RESOURCE
73 };
74 
75 enum order_t
76 {
77   ORDER_SUBJECT,
78   ORDER_SUBJECT_DEC,
79   ORDER_PREDICATE,
80   ORDER_PREDICATE_DEC,
81   ORDER_OBJECT,
82   ORDER_OBJECT_DEC
83 };
84 
85 enum nsorder_t
86 {
87   NSORDER_NAMESPACE,
88   NSORDER_NAMESPACE_DEC,
89   NSORDER_PREFIX,
90   NSORDER_PREFIX_DEC,
91   NSORDER_VISIBLE,
92   NSORDER_VISIBLE_DEC
93 };
94 
95 struct namespace_t
96 {
97   gchar *namespace;
98   GtkWidget *namespace_widget;
99 
100   gchar *prefix;
101   GtkWidget *prefix_widget;
102 
103   gboolean visible;
104   GtkWidget *visible_widget;
105 };
106 
107 enum rdf_format_t
108 {
109   RDF_FORMAT_XML = 0,
110   RDF_FORMAT_NTRIPLES,
111   RDF_FORMAT_TURTLE
112 };
113 
114 struct rdf_t
115 {
116   gchar *subject;
117   GtkWidget *subject_widget;
118 
119   gchar *predicate;
120   GtkWidget *predicate_widget;
121 
122   gchar *object;
123   GtkWidget *object_widget;
124 
125   enum rdf_object_t object_type;
126   GtkWidget *object_type_widget;
127 
128   gchar *lang;
129   GtkWidget *lang_widget;
130 
131   gchar *datatype;
132   GtkWidget *datatype_widget;
133 };
134 
135 struct rdfs_t
136 {
137   gchar *resource;
138   gchar *prefix;
139   gchar *path;
140 
141   GList *data;
142   GList *nsdata;
143 };
144 
145 struct thread_t
146 {
147   GFunc func;
148   gpointer data;
149   gint *flag;
150 };
151 
152 struct graph_data_t
153 {
154   gchar *color;
155   gchar *fontcolor;
156   gchar *style;
157   gchar *fillcolor;
158   gchar *shape;
159   gchar *fontname;
160   gint fontsize;
161 };
162 
163 enum unredo_type_t
164 {
165   UNREDO_TYPE_ADD,
166   UNREDO_TYPE_DEL,
167   UNREDO_TYPE_CHANGE
168 };
169 
170 struct unredo_change_t
171 {
172   struct rdf_t *now;
173   struct rdf_t *prev;
174 };
175 
176 struct unredo_t
177 {
178   enum unredo_type_t type;
179   GList *list;
180 };
181 
182 struct info_box_t
183 {
184   gchar *value;
185   gchar *lang;
186 };
187 
188 struct editor_data_t
189 {
190   struct editor_data_t *next;
191 
192   gchar *file;
193   gchar *uri;
194   struct module_t *module_save;
195 
196   enum rdf_format_t format;
197 
198   GList *rdf;
199   GList *namespace;
200 
201   GList *undo;
202   GList *redo;
203 
204   gboolean changed;
205 
206   GtkWidget *label;
207   GtkWidget *maker;
208 
209   GtkWidget *list;
210   GtkWidget *nslist;
211 
212   GtkWidget *subject_order;
213   GtkWidget *predicate_order;
214   GtkWidget *object_order;
215   enum order_t compare;
216 
217   GtkWidget *namespace_order;
218   GtkWidget *prefix_order;
219   GtkWidget *visible_order;
220   enum nsorder_t nscompare;
221 
222   gchar *node_select;
223   gchar *node_nsselect;
224 
225   struct rdf_t *rdf_select;
226 };
227 
228 struct template_t
229 {
230   gchar *uri;
231   gchar *name;
232   gchar *version;
233   gchar *category;
234   GList *input;
235 };
236 
237 enum template_input_typevalue_t
238 {
239   TEMPLATE_INPUT_TYPEVALUE_NONE,
240   TEMPLATE_INPUT_TYPEVALUE_RESOURCE,
241   TEMPLATE_INPUT_TYPEVALUE_LITERAL,
242   TEMPLATE_INPUT_TYPEVALUE_ALT_RESOURCE,
243   TEMPLATE_INPUT_TYPEVALUE_ALT_LITERAL,
244   TEMPLATE_INPUT_TYPEVALUE_OTHER
245 };
246 
247 struct template_input_t
248 {
249   GList *labels;
250   GList *comments;
251 
252   gchar *rdfs;
253 
254   gboolean lang;
255   gboolean datatype;
256 
257   gint min_cardinality;
258   gint max_cardinality;
259 
260   enum template_input_typevalue_t typevalue;
261   GList *alt_typevalue;
262   gchar *other_typevalue;
263 
264   gboolean visible;
265   gchar *default_value;
266   gchar *default_language;
267   gchar *default_datatype;
268 
269   gchar *function_init;
270   gchar *function_check;
271   gchar *function_destroy;
272   gchar *function_save;
273 
274   gboolean longtext;
275 };
276 
277 struct template_value_t
278 {
279   gchar *value;
280   gchar *lang;
281   gchar *datatype;
282   enum rdf_object_t type;
283 };
284 
285 struct update_template_t
286 {
287   gchar *uri;
288   gchar *name;
289   gchar *description;
290   gchar *author;
291   gchar *version;
292 };
293 
294 struct update_t
295 {
296   gchar *last_version;
297   GList *templates;
298 };
299 
300 enum parser_char_t
301 {
302   PARSER_CHAR_INIT = '*',
303   PARSER_CHAR_ERROR = '!',
304   PARSER_CHAR_WARNING = '_'
305 };
306 
307 struct datatype_t {
308   gchar *uri;
309   gchar *name;
310   gchar *description;
311   gboolean (*check)(gchar *, gchar *);
312 };
313 
314 struct download_t {
315   gint timeout;
316 
317   gboolean verifypeer;
318   gchar *certfile;
319   gchar *certpassword;
320   gchar *cacertfile;
321 
322   gchar *auth_user;
323   gchar *auth_password;
324 };
325 
326 struct tag_t
327 {
328   gchar *tag;
329 
330   PangoStyle style;
331   PangoVariant variant;
332   PangoWeight weight;
333   PangoStretch stretch;
334   gdouble scale;
335   gchar *foreground;
336   gchar *background;
337   PangoUnderline underline;
338 };
339 
340 #ifdef USE_JS
341 
342 #  define JS_MORLA_OK		0
343 #  define JS_MORLA_FAILURE	1
344 
345 struct js_t
346 {
347 #  ifdef USE_NGS_JS
348   JSInterpPtr interp;
349 #  elif USE_MOZILLA_JS
350   JSRuntime *rt;
351   JSContext *cx;
352   JSObject *global;
353 #  endif
354   GtkWidget *widget;
355 };
356 
357 #endif
358 
359 #define LOCK	1
360 #define WAIT	2
361 #define UNLOCK	3
362 
363 #define MORLA_COPYRIGHT	"Copyright 2005-2007 - GPL - Andrea Marchesini"
364 
365 #define THIS_DOCUMENT	"this:document"
366 #define BLANK_NODE	"blank_node:"
367 
368 #define RDF_XSD		"http://www.w3.org/2001/XMLSchema#"
369 
370 #define RDF_TYPE	"http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
371 #define RDF_ITEM	"http://www.w3.org/1999/02/22-rdf-syntax-ns#_"
372 
373 #define RDF_PROPERTY	"http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"
374 #define RDFS_LITERAL	"http://www.w3.org/2000/01/rdf-schema#Literal"
375 #define RDFS_RESOURCE	"http://www.w3.org/2000/01/rdf-schema#Resource"
376 
377 #define RDFS_COMMENT	"http://www.w3.org/2000/01/rdf-schema#comment"
378 #define RDFS_LABEL	"http://www.w3.org/2000/01/rdf-schema#label"
379 
380 #define RDFS_DOMAIN	"http://www.w3.org/2000/01/rdf-schema#domain"
381 #define RDFS_RANGE	"http://www.w3.org/2000/01/rdf-schema#range"
382 
383 #define RDF_ALT		"http://www.w3.org/1999/02/22-rdf-syntax-ns#Alt"
384 #define RDF_BAG		"http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"
385 #define RDF_SEQ		"http://www.w3.org/1999/02/22-rdf-syntax-ns#Seq"
386 
387 #define OWL_O_PROPERTY	"http://www.w3.org/2002/07/owl#ObjectProperty"
388 #define OWL_DT_PROPERTY	"http://www.w3.org/2002/07/owl#DatatypeProperty"
389 
390 #define RDF_SUBCLASSOF	"http://www.w3.org/2000/01/rdf-schema#subClassOf"
391 #define RDF_SUBPROPERTYOF "http://www.w3.org/2000/01/rdf-schema#subPropertyOf"
392 
393 #define MORLA_NS	"http://www.morlardf.net/morla#"
394 
395 #define MORLA_TEMPLATE	"Template"
396 #define MORLA_INPUT	"Input"
397 
398 #define MORLA_HASINPUT	      "hasInput"
399 #define MORLA_HASVERSION      "hasVersion"
400 #define MORLA_CATEGORY	      "category"
401 #define MORLA_HASRDFS         "hasRDFS"
402 #define MORLA_TYPEVALUE	      "typeValue"
403 #define MORLA_MINCARD	      "minCardinality"
404 #define MORLA_MAXCARD	      "maxCardinality"
405 #define MORLA_VISIBLE	      "visible"
406 #define MORLA_LANGUAGE        "language"
407 #define MORLA_DEFAULTLANGUAGE "defaultLanguage"
408 #define MORLA_DATATYPE	      "datatype"
409 #define MORLA_DEFAULTDATATYPE "defaultDatatype"
410 #define MORLA_DEFAULTVALUE    "defaultValue"
411 #define MORLA_LONGTEXT        "longText"
412 
413 #define MORLA_FUNCTIONINIT    "functionInit"
414 #define MORLA_FUNCTIONCHECK   "functionCheck"
415 #define MORLA_FUNCTIONDESTROY "functionDestroy"
416 #define MORLA_FUNCTIONSAVE    "functionSave"
417 
418 #define MORLA_ALT_RESOURCE "AltResource"
419 #define MORLA_ALT_LITERAL  "AltLiteral"
420 
421 #define MORLA_WEBSITE		"http://www.morlardf.net/"
422 #define MORLA_OLD_WEBSITE_1	"http://www.autistici.org/bakunin/morla/"
423 #define MORLA_OLD_WEBSITE_2	"http://autistici.org/bakunin/morla/"
424 #define MORLA_OLD_WEBSITE_3	"http://www2.autistici.org/bakunin/morla/"
425 
426 #define UPDATE_URL	"http://www.morlardf.net/update"
427 #define DOAP_URL	"http://www.morlardf.net/doap.rdf"
428 
429 #ifdef USE_GTKHTML
430 #  define HELP_URL	"http://www.morlardf.net/doc/"
431 #else
432 #  define HELP_URL	"http://morlardf.net/doc.php"
433 #endif
434 
435 #define UNDO_MAX_VALUE		10
436 #define LAST_DOCUMENT_VALUE	5
437 
438 extern int editor_statusbar_lock;
439 
440 extern struct editor_data_t *editor_data;
441 extern GtkWidget *notebook;
442 
443 extern gchar *browser_default;
444 extern gchar *viewer_default;
445 
446 extern gint default_width;
447 extern gint default_height;
448 
449 extern GList *thread_child;
450 extern GList *rdfs_list;
451 extern gint last_id;
452 
453 extern struct graph_data_t graph_blank_node;
454 extern struct graph_data_t graph_resource_node;
455 extern struct graph_data_t graph_literal_node;
456 extern struct graph_data_t graph_edge;
457 extern gchar *graph_format;
458 
459 extern gchar *normal_bg_color;
460 extern gchar *prelight_bg_color;
461 extern gchar *normal_fg_color;
462 extern gchar *prelight_fg_color;
463 
464 extern GList *template_list;
465 
466 extern GList *template_menus;
467 extern GtkWidget *template_toolbar;
468 
469 extern GList *last_list;
470 extern GtkWidget *last_menu;
471 extern gint last_document_value;
472 
473 extern GtkWidget *undo_widget[2];
474 extern GtkWidget *redo_widget[2];
475 extern gint undo_max_value;
476 
477 extern gint update_show;
478 extern gchar *update_url;
479 
480 extern gchar *blanknode_name;
481 
482 extern gchar *help_url;
483 
484 extern gchar *download_proxy;
485 
486 #ifdef USE_GCONF
487 extern gboolean download_proxy_gconf;
488 #endif
489 
490 extern gint download_proxy_port;
491 extern gchar *download_proxy_user;
492 extern gchar *download_proxy_password;
493 
494 extern gboolean automatic_extensions;
495 
496 extern GList *highlighting_tags;
497 extern gboolean highlighting_active;
498 
499 /* edit.c */
500 void		editor_add		(GtkWidget *	w,
501 					 gpointer	data);
502 
503 void		editor_cut		(GtkWidget *	w,
504 					 gpointer	data);
505 
506 void		editor_copy		(GtkWidget *	w,
507 					 gpointer	data);
508 
509 void		editor_paste		(GtkWidget *	w,
510 					 gpointer	data);
511 
512 void		editor_delete		(GtkWidget *	w,
513 					 gpointer	data);
514 
515 void		editor_cut_triple	(GtkWidget *	w,
516 					 gpointer	data);
517 
518 void		editor_copy_triple	(GtkWidget *	w,
519 					 gpointer	data);
520 
521 void		editor_delete_triple	(GtkWidget *	w,
522 					 gpointer	data);
523 
524 struct rdf_t *	editor_triple		(struct rdf_t *	prev,
525 					 gchar *	title);
526 
527 void		editor_merge_file	(GtkWidget *	w,
528 					 gpointer	data);
529 
530 void		editor_merge_uri	(GtkWidget *	w,
531 					 gpointer	data);
532 
533 /* file.c */
534 gboolean	editor_open_file	(gchar *		f,
535 					 gchar *		ff);
536 
537 gboolean	editor_open_uri		(gchar *		f,
538 					 struct download_t *	d);
539 
540 void		editor_open		(GtkWidget *		w,
541 					 gpointer		data);
542 
543 void		editor_save_as		(GtkWidget *		w,
544 					 gpointer		data);
545 
546 void		editor_save		(GtkWidget *		w,
547 					 gpointer		data);
548 
549 void		editor_close		(GtkWidget *		w,
550 					 gpointer		data);
551 
552 void		editor_close_selected	(GtkWidget *		w,
553 					 struct editor_data_t *	data);
554 
555 void		editor_new		(GtkWidget *		w,
556 	       				 gpointer		data);
557 
558 gchar *		editor_tmp_file		(void);
559 
560 /* main.c */
561 int		editor_quit	(GtkWidget *		w,
562 				 GdkEvent *		event,
563 				 gpointer		data);
564 
565 gchar *		utf8		(gchar *		str);
566 
567 char *		markup 		(gchar *		str);
568 
569 void		statusbar_set	(gchar *		what,
570 				 ...);
571 
572 void		fatal		(gchar *		text,
573 				 ...);
574 
575 void		run		(gchar **		a,
576 				 GChildWatchFunc	func,
577 				 gpointer		data);
578 
579 GList *		split		(gchar *		ar);
580 
581 gchar *		user_agent	(void);
582 
583 gchar *		dot_cmd		(void);
584 
585 GtkWindow *	main_window	(void);
586 
587 /* maker.c */
588 struct editor_data_t *	editor_get_data		(void);
589 
590 gint			editor_timeout		(gpointer data);
591 
592 void			editor_new_maker	(struct editor_data_t *	data);
593 
594 void			editor_refresh		(struct editor_data_t *	data);
595 
596 void			editor_refresh_nslist	(struct editor_data_t *	data);
597 
598 gint			editor_compare		(struct rdf_t *		rdf,
599 						 struct rdf_t *		what,
600 						 struct editor_data_t *	data);
601 
602 gint			editor_nscompare	(struct namespace_t *	ns,
603 						 struct namespace_t *	ns2,
604 						 struct editor_data_t *	data);
605 
606 /* edit.c */
607 void	editor_view			(GtkWidget *		w,
608 					 gpointer		data);
609 
610 void	editor_your_view		(GtkWidget *		w,
611 					 gpointer		data);
612 
613 void	editor_preferences		(GtkWidget *		w,
614 					 gpointer		data);
615 
616 GList *	create_no_dup			(GList *		ret);
617 
618 GList *	create_resources		(struct editor_data_t *	data);
619 
620 GList *	create_resources_by_rdfs	(GList *		ret);
621 
622 GList *	create_blank			(struct editor_data_t *	data);
623 
624 void	search_resources		(GtkWidget *		widget,
625 					 GtkWidget *		entry);
626 
627 gchar *	search_list			(GList *		list,
628 					 GtkWindow *		parent);
629 
630 /* dialog.c */
631 void		dialog_msg		(gchar *	msg);
632 
633 void		dialog_msg_with_error	(gchar *	msg,
634 					 gchar *	other);
635 
636 int		dialog_ask		(gchar *	msg);
637 
638 int		dialog_ask_with_cancel	(gchar *	msg);
639 
640 GtkWidget *	dialog_wait		(GCallback	callback,
641 					 gpointer	data,
642 					 GtkWidget **	pb);
643 
644 /* filechooser.c */
645 void *	file_chooser	(gchar *		str,
646 	       		 GtkSelectionMode	mode,
647 			 GtkFileChooserAction	action,
648 			 enum rdf_format_t *	rdf);
649 
650 gchar *	uri_chooser	(gchar *		str,
651 			 struct download_t **	options);
652 
653 /* rdf.c */
654 librdf_world *	rdf_world		(void);
655 gboolean	rdf_parse		(gchar *		what,
656 					 struct download_t *	download,
657 					 gboolean		this_document,
658 					 GList **		list,
659 					 enum rdf_format_t *	format,
660 					 GString **		string);
661 
662 gboolean	rdf_parse_thread	(gchar *		resource,
663 					 struct download_t *	download,
664 					 GList **		list,
665 					 GList **		nslist,
666 					 gboolean		this_document,
667 					 enum rdf_format_t *	format,
668 					 GString **		string);
669 
670 GList *		rdf_parse_stream	(librdf_stream *	stream);
671 
672 gboolean	rdf_parse_format	(gchar *		resource,
673 					 gchar *		buffer,
674 					 gboolean		this_document,
675 					 GList **		ret,
676 					 enum rdf_format_t	format,
677 					 GString **		string);
678 
679 gboolean	rdf_save_file		(gchar *		file,
680 					 GList *		rdf,
681 					 GList **		ns,
682 					 enum rdf_format_t	format);
683 
684 gboolean	rdf_save_buffer		(GList *		rdf,
685 					 GList **		ns,
686 					 enum rdf_format_t	format,
687 					 gchar **		buffer_ret);
688 
689 gboolean	rdf_is_no_saved		(struct editor_data_t *	data);
690 
691 void		rdf_free		(struct rdf_t *		rdf);
692 
693 struct rdf_t *	rdf_copy		(struct rdf_t *		rdf);
694 
695 gboolean	rdf_blank		(GList *		rdf,
696 					 gchar *		t);
697 
698 gboolean	rdf_resource		(GList *		rdf,
699 					 gchar *		t);
700 
701 int		rdf_error		(void *			dummy,
702 					 const char *		msg,
703 					 va_list va);
704 
705 int		rdf_warning		(void *			dummy,
706 					 const char *		msg,
707 					 va_list		va);
708 
709 gint		rdf_log			(GString **		error,
710 					 gchar *		str,
711 					 enum parser_char_t	c);
712 
713 /* namespace.c */
714 gboolean	namespace_parse		(GList *		rdf,
715 					 GList **		list);
716 void		namespace_free		(struct namespace_t *	ns);
717 gboolean	namespace_visible	(GList *		ns,
718 					 struct rdf_t *		rdf);
719 gchar *		namespace_prefix	(GList **		ns,
720 					 gchar *		t);
721 gchar *		namespace_create	(GList *		ns,
722 					 gchar *		t);
723 
724 /* browser.c */
725 void	browser		(gchar *	what);
726 
727 void	browser_website	(void);
728 
729 /* init.c */
730 void	init			(gchar *	m_config);
731 
732 GList *	init_highlighting	(void);
733 
734 void	init_save		(void);
735 
736 /* rdfs.c */
737 void	rdfs		(GtkWidget *	w,
738 			 gpointer	dummy);
739 
740 gint	rdfs_add	(gchar *	resource,
741 			 gchar *	prefix);
742 
743 gchar *	rdfs_file	(void);
744 
745 /* graph.c */
746 void	graph_run	(GtkWidget *		w,
747 			 gpointer		dummy);
748 
749 void	graph		(struct editor_data_t *	data);
750 
751 void	graph_save	(GtkWidget *		w,
752 			 gpointer		dummy);
753 
754 void	graph_graphviz	(void);
755 
756 /* about.c */
757 void	about		(GtkWidget *	w,
758 		 	gpointer	dummy);
759 
760 void	about_libraries	(void);
761 
762 /* template.c */
763 void		template_update		(void);
764 
765 void		template_import_uri	(GtkWidget *		w,
766 					 gpointer		dummy);
767 
768 void		template_import_file	(GtkWidget *		w,
769 					 gpointer		dummy);
770 
771 void		template		(GtkWidget *		w,
772 					 gpointer		dummy);
773 
774 gboolean	template_import		(gchar *		uri,
775 					 struct download_t *	download,
776 					 gboolean		b1,
777 					 gboolean		b2);
778 
779 void		template_save		(void);
780 
781 void		template_save_single	(GtkWidget *		w,
782 					 struct template_t *	t);
783 
784 void		template_open		(GtkWidget *		w,
785 					 struct template_t *	t);
786 
787 void		template_edit		(GtkWidget *		w,
788 					 struct template_t *	t);
789 
790 struct template_value_t *
791 		template_value_new	(GtkWidget *		w);
792 
793 void		template_value_set	(GtkWidget *		w,
794 					 struct template_value_t *
795 								value);
796 
797 void		template_value_free	(struct template_value_t *
798 								value);
799 
800 /* preferences.c */
801 void	preferences	(void);
802 
803 /* splash.c */
804 void		splash_show			(void);
805 
806 void		splash_hide			(void);
807 
808 gboolean	splash_showed			(void);
809 
810 void		splash_set_text			(char *		str,
811 						 ...);
812 
813 void		splash_set_text_with_effect	(char *		str,
814 						 ...);
815 
816 void		splash_sleep			(int		sleep);
817 
818 void		splash_close_on_click		(gboolean	value);
819 
820 /* unredo.c */
821 struct unredo_t *	unredo_new		(struct editor_data_t *	data,
822 						 enum unredo_type_t	type);
823 
824 void			unredo_add		(struct unredo_t *	unredo,
825 	       					 struct rdf_t *		rdf,
826 						 struct rdf_t *		rdf2);
827 
828 void			unredo_destroy		(struct editor_data_t *	data,
829 						 struct unredo_t *	unredo);
830 
831 void			unredo_undo		(void);
832 
833 void			unredo_redo		(void);
834 
835 void			unredo_change_value	(void);
836 
837 /* update.c */
838 gint	update_timer	(void);
839 
840 void	update_search	(void);
841 
842 gint	update_check	(void);
843 
844 /* merge.c */
845 GList *	merge		(GList *		rdf,
846 			 gchar *		what,
847 			 struct download_t *	download,
848 			 GString **		string);
849 
850 void	merge_graph	(void);
851 
852 /* navigator.c */
853 void	navigator_run	(void);
854 
855 void	navigator_open_uri	(void);
856 
857 /* search.c */
858 gboolean	search		(gchar *	uri,
859 				 GList **	meta,
860 				 GList **	other,
861 				 gchar **	error);
862 
863 void		search_open	(gchar *	text,
864 				 void		(*func) (gchar *, gpointer),
865 				 gpointer	data);
866 
867 /* last.c */
868 void	last_update		(void);
869 
870 void	last_add		(gchar *	uri);
871 
872 void	last_change_value	(void);
873 
874 /* help.c */
875 void	help	(void);
876 
877 /* info.c */
878 void		info_selected		(void);
879 
880 void		info_uri		(void);
881 
882 void		info_this		(void);
883 
884 gboolean	info_box_popup_show	(GtkWidget *		w,
885 					 GdkEventButton *	event,
886 					 GList *		list);
887 
888 gboolean	info_box_popup_hide	(GtkWidget *		w,
889 					 GdkEventButton *	event,
890 					 gpointer		data);
891 
892 gboolean	info_box_enter		(GtkWidget *		w,
893 					 GdkEventCrossing *	event,
894 					 gpointer		data);
895 
896 gboolean	info_box_leave		(GtkWidget *		w,
897 					 GdkEventCrossing *	event,
898 					 gpointer		data);
899 
900 void		info_box_free		(struct info_box_t *	info);
901 
902 /* query.c */
903 void	query_sparql	(void);
904 void	query_rsql	(void);
905 
906 /* checks.c */
907 void	check_rasqal	(void);
908 void	check_redland	(void);
909 
910 /* datatype.c */
911 struct datatype_t *	datatype_list	(void);
912 
913 gboolean		datatype_check	(gint		id,
914 					 gchar *	what,
915 					 gchar *	check);
916 
917 void		datatype_change		(GtkWidget *	w,
918 					 GtkWidget *	label);
919 
920 gint		datatype_id		(gchar *	what);
921 
922 gboolean	datatype_exists		(gchar *	what);
923 
924 /* download.c */
925 gboolean		download_uri	(gchar *		uri,
926 					 gchar **		buffer,
927 					 struct download_t *	download,
928 					 gchar **		error);
929 
930 void			download_free	(struct download_t *	donwload);
931 
932 struct download_t *	download_copy	(struct download_t *	download);
933 
934 /* ntriples.c */
935 gchar *	ntriples	(librdf_node *	node);
936 
937 /* blanknode.c */
938 gboolean	blanknode_get		(gchar *	what,
939 					 gint *		id);
940 
941 gchar *		blanknode_create	(gint		id);
942 
943 /* textview.c */
944 GtkWidget *	textview_new			(GCallback	change,
945 						 gpointer	data);
946 
947 void		textview_add_tag		(GtkWidget *	text,
948 						 gchar *	tag,
949 						 PangoStyle	style,
950 						 PangoVariant	variant,
951 						 PangoWeight	weight,
952 						 PangoStretch	stretch,
953 						 gdouble	scale,
954 						 gchar *	foreground,
955 						 gchar *	background,
956 						 PangoUnderline	underline);
957 
958 void		textview_insert			(GtkWidget *	widget,
959 						 GtkTextIter *	iter,
960 						 gchar *	text,
961 						 gint		len);
962 
963 void		textview_insert_at_cursor	(GtkWidget *	widget,
964 						 gchar *	text,
965 						 gint		len);
966 
967 void		textview_clean_tags		(GtkWidget *	widget);
968 
969 /* js.c */
970 struct js_t *	js_new			(void);
971 
972 void		js_destroy		(struct js_t *	js);
973 
974 void		js_current_widget	(struct js_t *	js,
975 					 GtkWidget *	widget);
976 
977 gboolean	js_evaluate		(struct js_t *	js,
978 					 gchar *	buffer);
979 
980 /* module.c */
981 void		module_init		(gchar *	config);
982 
983 void		module_shutdown		(void);
984 
985 void		module_menu_open	(GtkMenu *	menu,
986 					 GtkWidget *	parent);
987 
988 void		module_menu_save	(GtkMenu *	menu,
989 					 GtkWidget *	parent);
990 
991 void		module_menu_view	(GtkMenu *	menu,
992 					 GtkWidget *	parent);
993 
994 void		module_run_open		(GtkWidget *	widget,
995 					 struct module_t *
996 					 		module);
997 
998 void		module_run_save		(GtkWidget *	widget,
999 					 struct module_t *
1000 					 		module);
1001 
1002 struct module_t *
1003 		module_default_open	(void);
1004 
1005 struct module_t *
1006 		module_default_save	(void);
1007 
1008 /* gconf.c */
1009 void		morla_gconf_init	(void);
1010 
1011 gboolean	morla_gconf_proxy	(gchar **	proxy,
1012 					 gint *		port,
1013 					 gchar **	user,
1014 					 gchar **	password,
1015 					 GSList **	list);
1016 
1017 void		morla_gconf_shutdown	(void);
1018 
1019 /* EOF */
1020