/** * inf_text_buffer_insert_text: * @buffer: A #InfTextBuffer. * @pos: A character offset into @buffer. * @text (type=guint8*) (array length=bytes) (transfer none): A pointer to * the text to insert. * @len: The length (in characters) of @text. * @bytes: The length (in bytes) of @text. * @user: (allow-none): A #InfUser that has inserted the new text, or %NULL. * * Inserts @text into @buffer as written by @author. @text must be encoded in * the character encoding of the buffer, see inf_text_buffer_get_encoding(). **/ void inf_text_buffer_insert_text(InfTextBuffer* buffer, guint pos, gconstpointer text, gsize bytes, guint len, InfUser* user) { InfTextBufferInterface* iface; InfTextChunk* chunk; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(text != NULL); g_return_if_fail(user == NULL || INF_IS_USER(user)); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->insert_text != NULL); chunk = inf_text_chunk_new(inf_text_buffer_get_encoding(buffer)); inf_text_chunk_insert_text( chunk, 0, text, bytes, len, user == NULL ? 0 : inf_user_get_id(user) ); iface->insert_text(buffer, pos, chunk, user); inf_text_chunk_free(chunk); }
void TextBuffer::insertChunk( unsigned int pos, const TextChunk &chunk, User *user ) { InfTextBufferIface* iface = INF_TEXT_BUFFER_GET_IFACE(INF_TEXT_BUFFER(gobject())); inf_text_buffer_text_inserted( INF_TEXT_BUFFER(gobject()), pos, chunk.infChunk(), INF_USER(user->gobject()) ); inf_text_buffer_insert_chunk( INF_TEXT_BUFFER(gobject()), pos, chunk.infChunk(), INF_USER(user->gobject()) ); }
/** * inf_text_buffer_get_encoding: * @buffer: A #InfTextBuffer. * * Returns the character encoding that the buffer uses. This means that all * #InfTextChunk return values are encoded in this encoding and all * #InfTextChunk parameters are expected to be encoded in that encoding. * * Returns: The character encoding for @buffer. **/ const gchar* inf_text_buffer_get_encoding(InfTextBuffer* buffer) { InfTextBufferInterface* iface; g_return_val_if_fail(INF_TEXT_IS_BUFFER(buffer), NULL); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_val_if_fail(iface->get_encoding != NULL, NULL); return iface->get_encoding(buffer); }
/** * inf_text_buffer_create_end_iter: * @buffer: A #InfTextBuffer. * * Creates a #InfTextBufferIter pointing to the last segment of @buffer. * A #InfTextBufferIter is used to traverse the buffer contents in steps of * so-called segments each of which is written by the same user. The function * returns %NULL if there are no segments (i.e. the buffer is empty). * * The iterator stays valid as long as the buffer remains unmodified and * must be freed with inf_text_buffer_destroy_iter() before. * * Returns: (transfer full) (allow-none): A #InfTextBufferIter to be freed by * inf_text_buffer_destroy_iter() when done using it, or %NULL. **/ InfTextBufferIter* inf_text_buffer_create_end_iter(InfTextBuffer* buffer) { InfTextBufferInterface* iface; g_return_val_if_fail(INF_TEXT_IS_BUFFER(buffer), NULL); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_val_if_fail(iface->create_end_iter != NULL, NULL); return iface->create_end_iter(buffer); }
/** * inf_text_buffer_get_length: * @buffer: A #InfTextBuffer. * * Returns the number of characters in @buffer. * * Returns: The length of @buffer. **/ guint inf_text_buffer_get_length(InfTextBuffer* buffer) { InfTextBufferInterface* iface; g_return_val_if_fail(INF_TEXT_IS_BUFFER(buffer), 0); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_val_if_fail(iface->get_length != NULL, 0); return iface->get_length(buffer); }
/** * inf_text_buffer_iter_get_author: * @buffer: A #InfTextBuffer. * @iter: A #InfTextBufferIter pointing into @buffer. * * Returns the user ID of the user that has written the segment @iter points * to. * * Returns: The user ID of the user that wrote the segment @iter points * to. **/ guint inf_text_buffer_iter_get_author(InfTextBuffer* buffer, InfTextBufferIter* iter) { InfTextBufferInterface* iface; g_return_val_if_fail(INF_TEXT_IS_BUFFER(buffer), 0); g_return_val_if_fail(iter != NULL, 0); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_val_if_fail(iface->iter_get_author != NULL, 0); return iface->iter_get_author(buffer, iter); }
/** * inf_text_buffer_iter_prev: * @buffer: A #InfTextBuffer. * @iter: A #InfTextBufferIter pointing into @buffer. * * Moves @iter to point to the previous segment in the buffer. If @iter * already points to the first segment, @iter is left unmodified and the * function returns %FALSE. * * Returns: Whether @iter was moved. **/ gboolean inf_text_buffer_iter_prev(InfTextBuffer* buffer, InfTextBufferIter* iter) { InfTextBufferInterface* iface; g_return_val_if_fail(INF_TEXT_IS_BUFFER(buffer), FALSE); g_return_val_if_fail(iter != NULL, FALSE); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_val_if_fail(iface->iter_prev != NULL, FALSE); return iface->iter_prev(buffer, iter); }
/** * inf_text_buffer_destroy_iter: * @buffer: A #InfTextBuffer. * @iter: (transfer full): A #InfTextBufferIter pointing into @buffer. * * Destroys a #InfTextBufferIter created by * inf_text_buffer_create_begin_iter() or inf_text_buffer_create_end_iter(). **/ void inf_text_buffer_destroy_iter(InfTextBuffer* buffer, InfTextBufferIter* iter) { InfTextBufferInterface* iface; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(iter != NULL); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->destroy_iter != NULL); iface->destroy_iter(buffer, iter); }
/** * inf_text_buffer_get_slice: * @buffer: A #InfTextBuffer. * @pos: Character offset of where to start extracting. * @len: Number of characters to extract. * * Reads @len characters, starting at @pos, from the buffer, and returns them * as a #InfTextChunk. * * Returns: (transfer full): A #InfTextChunk. **/ InfTextChunk* inf_text_buffer_get_slice(InfTextBuffer* buffer, guint pos, guint len) { InfTextBufferInterface* iface; g_return_val_if_fail(INF_TEXT_IS_BUFFER(buffer), NULL); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_val_if_fail(iface->get_slice != NULL, NULL); return iface->get_slice(buffer, pos, len); }
/** * inf_text_buffer_erase_text: * @buffer: A #InfTextBuffer. * @pos: The position to begin deleting characters from. * @len: The amount of characters to delete. * @user: (allow-none): A #InfUser that erases the text, or %NULL. * * Erases characters from the text buffer. **/ void inf_text_buffer_erase_text(InfTextBuffer* buffer, guint pos, guint len, InfUser* user) { InfTextBufferInterface* iface; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(user == NULL || INF_IS_USER(user)); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->erase_text != NULL); iface->erase_text(buffer, pos, len, user); }
/** * inf_text_buffer_insert_chunk: * @buffer: A #InfTextBuffer. * @pos: A character offset into @buffer. * @chunk: (transfer none): A #InfTextChunk. * @user: (allow-none): A #InfUser inserting @chunk, or %NULL. * * Inserts a #InfTextChunk into @buffer. @user must not necessarily be the * author of @chunk (@chunk may even consist of multiple segments). This * happens when undoing a delete operation that erased another user's text. **/ void inf_text_buffer_insert_chunk(InfTextBuffer* buffer, guint pos, InfTextChunk* chunk, InfUser* user) { InfTextBufferInterface* iface; g_return_if_fail(INF_TEXT_IS_BUFFER(buffer)); g_return_if_fail(chunk != NULL); g_return_if_fail(user == NULL || INF_IS_USER(user)); iface = INF_TEXT_BUFFER_GET_IFACE(buffer); g_return_if_fail(iface->insert_text != NULL); iface->insert_text(buffer, pos, chunk, user); }