Moving session stuff into Project plugin
parent
9d544ab356
commit
d59436525b
|
@ -1,36 +0,0 @@
|
||||||
/*
|
|
||||||
* mooeditsession-private.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* See COPYING file that comes with this distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MOOEDIT_COMPILATION
|
|
||||||
#error "This file may not be used directly"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __MOO_EDIT_SESSION_PRIVATE_H__
|
|
||||||
#define __MOO_EDIT_SESSION_PRIVATE_H__
|
|
||||||
|
|
||||||
#include "mooedit/mooeditor.h"
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
|
|
||||||
MooEditSession *_moo_edit_session_new (void);
|
|
||||||
void _moo_edit_session_add_window (MooEditSession *session,
|
|
||||||
MooEditWindow *window);
|
|
||||||
void _moo_edit_session_load (MooEditSession *session,
|
|
||||||
MooEditor *editor,
|
|
||||||
MooEditWindow *window);
|
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __MOO_EDIT_SESSION_PRIVATE_H__ */
|
|
|
@ -1,485 +0,0 @@
|
||||||
/*
|
|
||||||
* mooeditsession.c
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* See COPYING file that comes with this distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define MOOEDIT_COMPILATION
|
|
||||||
#include "mooedit/mooeditsession-private.h"
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _SWindow SWindow;
|
|
||||||
typedef struct _SDoc SDoc;
|
|
||||||
|
|
||||||
struct _SWindow {
|
|
||||||
GSList *docs;
|
|
||||||
int active;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _SDoc {
|
|
||||||
char *filename;
|
|
||||||
char *encoding;
|
|
||||||
int line;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _MooEditSession {
|
|
||||||
GSList *windows; /* MooEditSessionWindow* */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static SWindow *session_window_new (void);
|
|
||||||
static SWindow *session_window_copy (SWindow *win);
|
|
||||||
static void session_window_free (SWindow *win);
|
|
||||||
static SDoc *session_doc_new (const char *filename,
|
|
||||||
const char *encoding);
|
|
||||||
static SDoc *session_doc_copy (SDoc *doc);
|
|
||||||
static void session_doc_free (SDoc *doc);
|
|
||||||
|
|
||||||
|
|
||||||
GType
|
|
||||||
moo_edit_session_get_type (void)
|
|
||||||
{
|
|
||||||
static GType type;
|
|
||||||
|
|
||||||
if (G_UNLIKELY (!type))
|
|
||||||
type = g_boxed_type_register_static ("MooEditSession",
|
|
||||||
(GBoxedCopyFunc) moo_edit_session_copy,
|
|
||||||
(GBoxedFreeFunc) moo_edit_session_free);
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MooEditSession *
|
|
||||||
_moo_edit_session_new (void)
|
|
||||||
{
|
|
||||||
return g_new0 (MooEditSession, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MooEditSession *
|
|
||||||
moo_edit_session_copy (MooEditSession *session)
|
|
||||||
{
|
|
||||||
MooEditSession *copy;
|
|
||||||
GSList *l;
|
|
||||||
|
|
||||||
g_return_val_if_fail (session != NULL, NULL);
|
|
||||||
|
|
||||||
copy = _moo_edit_session_new ();
|
|
||||||
|
|
||||||
for (l = session->windows; l != NULL; l = l->next)
|
|
||||||
copy->windows = g_slist_prepend (copy->windows,
|
|
||||||
session_window_copy (l->data));
|
|
||||||
copy->windows = g_slist_reverse (copy->windows);
|
|
||||||
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
moo_edit_session_free (MooEditSession *session)
|
|
||||||
{
|
|
||||||
if (session)
|
|
||||||
{
|
|
||||||
g_slist_foreach (session->windows, (GFunc) session_window_free, NULL);
|
|
||||||
g_slist_free (session->windows);
|
|
||||||
g_free (session);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static SWindow *
|
|
||||||
session_window_new (void)
|
|
||||||
{
|
|
||||||
return g_new0 (SWindow, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static SWindow *
|
|
||||||
session_window_copy (SWindow *win)
|
|
||||||
{
|
|
||||||
SWindow *copy;
|
|
||||||
GSList *l;
|
|
||||||
|
|
||||||
g_return_val_if_fail (win != NULL, NULL);
|
|
||||||
|
|
||||||
copy = session_window_new ();
|
|
||||||
|
|
||||||
for (l = win->docs; l != NULL; l = l->next)
|
|
||||||
copy->docs = g_slist_prepend (copy->docs,
|
|
||||||
session_doc_copy (l->data));
|
|
||||||
|
|
||||||
copy->active = win->active;
|
|
||||||
copy->docs = g_slist_reverse (copy->docs);
|
|
||||||
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
session_window_free (SWindow *win)
|
|
||||||
{
|
|
||||||
if (win)
|
|
||||||
{
|
|
||||||
g_slist_foreach (win->docs, (GFunc) session_doc_free, NULL);
|
|
||||||
g_slist_free (win->docs);
|
|
||||||
g_free (win);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static SDoc *
|
|
||||||
session_doc_new (const char *filename,
|
|
||||||
const char *encoding)
|
|
||||||
{
|
|
||||||
SDoc *doc;
|
|
||||||
|
|
||||||
g_return_val_if_fail (filename != NULL, NULL);
|
|
||||||
|
|
||||||
doc = g_new0 (SDoc, 1);
|
|
||||||
doc->filename = g_strdup (filename);
|
|
||||||
doc->encoding = g_strdup (encoding);
|
|
||||||
|
|
||||||
return doc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static SDoc *
|
|
||||||
session_doc_copy (SDoc *doc)
|
|
||||||
{
|
|
||||||
SDoc *copy;
|
|
||||||
|
|
||||||
g_return_val_if_fail (doc != NULL, NULL);
|
|
||||||
|
|
||||||
copy = session_doc_new (doc->filename, doc->encoding);
|
|
||||||
copy->line = doc->line;
|
|
||||||
|
|
||||||
return copy;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
session_doc_free (SDoc *doc)
|
|
||||||
{
|
|
||||||
if (doc)
|
|
||||||
{
|
|
||||||
g_free (doc->filename);
|
|
||||||
g_free (doc->encoding);
|
|
||||||
g_free (doc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* XXX docs may be saved/renamed, encoding may change between here
|
|
||||||
and the time when they are actually closed */
|
|
||||||
void
|
|
||||||
_moo_edit_session_add_window (MooEditSession *session,
|
|
||||||
MooEditWindow *window)
|
|
||||||
{
|
|
||||||
GSList *docs;
|
|
||||||
SWindow *swin;
|
|
||||||
|
|
||||||
g_return_if_fail (session != NULL);
|
|
||||||
g_return_if_fail (MOO_IS_EDIT_WINDOW (window));
|
|
||||||
|
|
||||||
swin = session_window_new ();
|
|
||||||
docs = moo_edit_window_list_docs (window);
|
|
||||||
|
|
||||||
while (docs)
|
|
||||||
{
|
|
||||||
MooEdit *edit;
|
|
||||||
SDoc *sdoc;
|
|
||||||
const char *filename;
|
|
||||||
|
|
||||||
edit = docs->data;
|
|
||||||
filename = moo_edit_get_filename (edit);
|
|
||||||
|
|
||||||
if (filename)
|
|
||||||
{
|
|
||||||
GtkTextBuffer *buffer;
|
|
||||||
GtkTextIter iter;
|
|
||||||
|
|
||||||
sdoc = session_doc_new (filename, moo_edit_get_encoding (edit));
|
|
||||||
g_return_if_fail (sdoc != NULL);
|
|
||||||
|
|
||||||
swin->docs = g_slist_prepend (swin->docs, sdoc);
|
|
||||||
|
|
||||||
if (edit == moo_edit_window_get_active_doc (window))
|
|
||||||
swin->active = g_slist_length (swin->docs) - 1;
|
|
||||||
|
|
||||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (edit));
|
|
||||||
gtk_text_buffer_get_iter_at_mark (buffer, &iter,
|
|
||||||
gtk_text_buffer_get_insert (buffer));
|
|
||||||
sdoc->line = gtk_text_iter_get_line (&iter);
|
|
||||||
}
|
|
||||||
|
|
||||||
docs = g_slist_delete_link (docs, docs);
|
|
||||||
}
|
|
||||||
|
|
||||||
swin->docs = g_slist_reverse (swin->docs);
|
|
||||||
session->windows = g_slist_append (session->windows, swin);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
_moo_edit_session_load (MooEditSession *session,
|
|
||||||
MooEditor *editor,
|
|
||||||
MooEditWindow *window)
|
|
||||||
{
|
|
||||||
GSList *wl;
|
|
||||||
gboolean silent;
|
|
||||||
|
|
||||||
g_return_if_fail (session != NULL);
|
|
||||||
g_return_if_fail (MOO_IS_EDITOR (editor));
|
|
||||||
|
|
||||||
g_object_get (editor, "silent", &silent, NULL);
|
|
||||||
g_object_set (editor, "silent", TRUE, NULL);
|
|
||||||
|
|
||||||
for (wl = session->windows; wl != NULL; wl = wl->next)
|
|
||||||
{
|
|
||||||
GSList *dl;
|
|
||||||
SWindow *swin = wl->data;
|
|
||||||
|
|
||||||
if (!window)
|
|
||||||
{
|
|
||||||
window = moo_editor_new_window (editor);
|
|
||||||
g_return_if_fail (window != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (dl = swin->docs; dl != NULL; dl = dl->next)
|
|
||||||
{
|
|
||||||
SDoc *sdoc = dl->data;
|
|
||||||
MooEdit *edit;
|
|
||||||
|
|
||||||
edit = moo_editor_open_file (editor, window, NULL,
|
|
||||||
sdoc->filename,
|
|
||||||
sdoc->encoding);
|
|
||||||
|
|
||||||
if (!edit)
|
|
||||||
{
|
|
||||||
g_warning ("%s: could not open file '%s'",
|
|
||||||
G_STRLOC, sdoc->filename);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sdoc->line >= 0)
|
|
||||||
moo_text_view_move_cursor (MOO_TEXT_VIEW (edit), sdoc->line,
|
|
||||||
0, FALSE, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (swin->active >= 0 && swin->active < (int) moo_edit_window_num_docs (window))
|
|
||||||
{
|
|
||||||
MooEdit *edit = moo_edit_window_get_nth_doc (window, swin->active);
|
|
||||||
moo_edit_window_set_active_doc (window, edit);
|
|
||||||
}
|
|
||||||
|
|
||||||
window = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_set (editor, "silent", silent, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
|
||||||
/* Saving/loading
|
|
||||||
*/
|
|
||||||
|
|
||||||
MooEditSession *
|
|
||||||
moo_edit_session_parse_markup (const char *markup)
|
|
||||||
{
|
|
||||||
MooMarkupDoc *doc;
|
|
||||||
MooMarkupNode *root;
|
|
||||||
MooEditSession *session;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
g_return_val_if_fail (markup != NULL, NULL);
|
|
||||||
|
|
||||||
doc = moo_markup_parse_memory (markup, -1, &error);
|
|
||||||
|
|
||||||
if (!doc)
|
|
||||||
{
|
|
||||||
g_warning ("%s: %s", G_STRLOC, error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
root = moo_markup_get_root_element (doc, MOO_EDIT_SESSION_ELM_SESSION);
|
|
||||||
|
|
||||||
if (!root)
|
|
||||||
{
|
|
||||||
g_warning ("%s: no %s element", G_STRLOC, MOO_EDIT_SESSION_ELM_SESSION);
|
|
||||||
moo_markup_doc_unref (doc);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
session = moo_edit_session_parse_node (MOO_MARKUP_NODE (root));
|
|
||||||
moo_markup_doc_unref (doc);
|
|
||||||
return session;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
parse_doc_node (SWindow *window,
|
|
||||||
MooMarkupNode *node)
|
|
||||||
{
|
|
||||||
char *filename;
|
|
||||||
const char *encoding;
|
|
||||||
SDoc *doc;
|
|
||||||
|
|
||||||
g_assert (window != NULL);
|
|
||||||
g_assert (MOO_MARKUP_IS_ELEMENT (node));
|
|
||||||
g_assert (!strcmp (node->name, MOO_EDIT_SESSION_ELM_DOC));
|
|
||||||
|
|
||||||
filename = moo_markup_get_file_content (node);
|
|
||||||
|
|
||||||
if (!filename)
|
|
||||||
{
|
|
||||||
g_warning ("%s: could not get filename from '%s' element",
|
|
||||||
G_STRLOC, node->name);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
encoding = moo_markup_get_prop (node, MOO_EDIT_SESSION_PROP_ENCODING);
|
|
||||||
|
|
||||||
encoding = encoding && encoding[0] ? encoding : NULL;
|
|
||||||
doc = session_doc_new (filename, encoding);
|
|
||||||
doc->line = moo_markup_get_int_prop (node, MOO_EDIT_SESSION_PROP_LINE, -1);
|
|
||||||
|
|
||||||
window->docs = g_slist_prepend (window->docs, doc);
|
|
||||||
|
|
||||||
g_free (filename);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MooEditSession *
|
|
||||||
moo_edit_session_parse_node (MooMarkupNode *root)
|
|
||||||
{
|
|
||||||
MooMarkupNode *window_node;
|
|
||||||
MooEditSession *session = NULL;
|
|
||||||
SWindow *window = NULL;
|
|
||||||
|
|
||||||
g_return_val_if_fail (MOO_MARKUP_IS_ELEMENT (root), NULL);
|
|
||||||
|
|
||||||
session = _moo_edit_session_new ();
|
|
||||||
|
|
||||||
for (window_node = root->children; window_node != NULL; window_node = window_node->next)
|
|
||||||
{
|
|
||||||
MooMarkupNode *child;
|
|
||||||
|
|
||||||
if (!MOO_MARKUP_IS_ELEMENT (window_node))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp (window_node->name, MOO_EDIT_SESSION_ELM_WINDOW))
|
|
||||||
{
|
|
||||||
g_warning ("%s: unexpected element '%s' under %s node",
|
|
||||||
G_STRLOC, window_node->name, root->name);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
window = session_window_new ();
|
|
||||||
window->active = moo_markup_get_int_prop (window_node, MOO_EDIT_SESSION_PROP_ACTIVE_DOC, -1);
|
|
||||||
|
|
||||||
for (child = window_node->children; child != NULL; child = child->next)
|
|
||||||
{
|
|
||||||
if (!MOO_MARKUP_IS_ELEMENT (child))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!strcmp (child->name, MOO_EDIT_SESSION_ELM_DOC))
|
|
||||||
{
|
|
||||||
if (!parse_doc_node (window, child))
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_warning ("%s: unexpected element '%s' under %s node",
|
|
||||||
G_STRLOC, child->name, window_node->name);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
window->docs = g_slist_reverse (window->docs);
|
|
||||||
|
|
||||||
if (window->active >= 0 && window->active >= (int) g_slist_length (window->docs))
|
|
||||||
{
|
|
||||||
g_warning ("%s: invalid active document index %d", G_STRLOC, window->active);
|
|
||||||
window->active = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
session->windows = g_slist_prepend (session->windows, window);
|
|
||||||
window = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
session->windows = g_slist_reverse (session->windows);
|
|
||||||
return session;
|
|
||||||
|
|
||||||
error:
|
|
||||||
moo_edit_session_free (session);
|
|
||||||
session_window_free (window);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *
|
|
||||||
moo_edit_session_get_markup (MooEditSession *session)
|
|
||||||
{
|
|
||||||
MooMarkupDoc *doc;
|
|
||||||
MooMarkupNode *root;
|
|
||||||
GSList *wl;
|
|
||||||
char *string;
|
|
||||||
|
|
||||||
g_return_val_if_fail (session != NULL, NULL);
|
|
||||||
|
|
||||||
doc = moo_markup_doc_new ("MooEditSession");
|
|
||||||
|
|
||||||
root = moo_markup_create_root_element (doc, MOO_EDIT_SESSION_ELM_SESSION);
|
|
||||||
|
|
||||||
for (wl = session->windows; wl != NULL; wl = wl->next)
|
|
||||||
{
|
|
||||||
GSList *dl;
|
|
||||||
MooMarkupNode *window_node;
|
|
||||||
SWindow *window = wl->data;
|
|
||||||
|
|
||||||
window_node = moo_markup_create_element (root, MOO_EDIT_SESSION_ELM_WINDOW);
|
|
||||||
|
|
||||||
if (window->active >= 0)
|
|
||||||
moo_markup_set_int_prop (window_node,
|
|
||||||
MOO_EDIT_SESSION_PROP_ACTIVE_DOC,
|
|
||||||
window->active);
|
|
||||||
|
|
||||||
for (dl = window->docs; dl != NULL; dl = dl->next)
|
|
||||||
{
|
|
||||||
MooMarkupNode *doc_node;
|
|
||||||
SDoc *doc = dl->data;
|
|
||||||
|
|
||||||
doc_node = moo_markup_create_file_element (window_node,
|
|
||||||
MOO_EDIT_SESSION_ELM_DOC,
|
|
||||||
doc->filename);
|
|
||||||
|
|
||||||
/* XXX */
|
|
||||||
if (doc->encoding && doc->encoding[0] &&
|
|
||||||
g_ascii_strcasecmp (doc->encoding, "utf8") &&
|
|
||||||
g_ascii_strcasecmp (doc->encoding, "utf-8"))
|
|
||||||
moo_markup_set_prop (doc_node,
|
|
||||||
MOO_EDIT_SESSION_PROP_ENCODING,
|
|
||||||
doc->encoding);
|
|
||||||
|
|
||||||
if (doc->line > 0)
|
|
||||||
moo_markup_set_int_prop (doc_node,
|
|
||||||
MOO_EDIT_SESSION_PROP_LINE,
|
|
||||||
doc->line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string = moo_markup_node_get_pretty_string (MOO_MARKUP_NODE (doc), 2);
|
|
||||||
moo_markup_doc_unref (doc);
|
|
||||||
return string;
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
/*
|
|
||||||
* mooeditsession.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 2004-2006 by Yevgen Muntyan <muntyan@math.tamu.edu>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* See COPYING file that comes with this distribution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __MOO_EDIT_SESSION_H__
|
|
||||||
#define __MOO_EDIT_SESSION_H__
|
|
||||||
|
|
||||||
#include <mooedit/mooeditwindow.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
|
|
||||||
#define MOO_TYPE_EDIT_SESSION (moo_edit_session_get_type ())
|
|
||||||
typedef struct _MooEditSession MooEditSession;
|
|
||||||
|
|
||||||
|
|
||||||
#define MOO_EDIT_SESSION_ELM_SESSION "session"
|
|
||||||
#define MOO_EDIT_SESSION_ELM_WINDOW "window"
|
|
||||||
#define MOO_EDIT_SESSION_ELM_DOC "doc"
|
|
||||||
#define MOO_EDIT_SESSION_PROP_ENCODING "encoding"
|
|
||||||
#define MOO_EDIT_SESSION_PROP_LINE "line"
|
|
||||||
#define MOO_EDIT_SESSION_PROP_ACTIVE_DOC "active-doc"
|
|
||||||
|
|
||||||
|
|
||||||
GType moo_edit_session_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
MooEditSession *moo_edit_session_copy (MooEditSession *session);
|
|
||||||
void moo_edit_session_free (MooEditSession *session);
|
|
||||||
|
|
||||||
MooEditSession *moo_edit_session_parse_markup (const char *markup);
|
|
||||||
MooEditSession *moo_edit_session_parse_node (MooMarkupNode *node);
|
|
||||||
char *moo_edit_session_get_markup (MooEditSession *session);
|
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __MOO_EDIT_SESSION_H__ */
|
|
Loading…
Reference in New Issue