/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* ETextModel - Text item model for evolution.
 * Copyright (C) 2000 Helix Code, Inc.
 *
 * Author: Chris Lahey <clahey@umich.edu>
 *
 * A majority of code taken from:
 *
 * Text item type for GnomeCanvas widget
 *
 * GnomeCanvas is basically a port of the Tk toolkit's most excellent
 * canvas widget.  Tk is copyrighted by the Regents of the University
 * of California, Sun Microsystems, and other parties.
 *
 * Copyright (C) 1998 The Free Software Foundation
 *
 * Author: Federico Mena <federico@nuclecu.unam.mx> */

#include <config.h>
#include <ctype.h>
#include "e-text-model.h"

enum {
	E_TEXT_MODEL_CHANGED,
	E_TEXT_MODEL_LAST_SIGNAL
};

static guint e_text_model_signals[E_TEXT_MODEL_LAST_SIGNAL] = { 0 };

static void e_text_model_class_init (ETextModelClass *class);
static void e_text_model_init (ETextModel *model);
static void e_text_model_destroy (GtkObject *object);

static gchar *e_text_model_real_get_text(ETextModel *model);
static void e_text_model_real_set_text(ETextModel *model, gchar *text);
static void e_text_model_real_insert(ETextModel *model, gint postion, gchar *text);
static void e_text_model_real_insert_length(ETextModel *model, gint postion, gchar *text, gint length);
static void e_text_model_real_delete(ETextModel *model, gint postion, gint length);

static GtkObject *parent_class;



/**
 * e_text_model_get_type:
 * @void: 
 * 
 * Registers the &ETextModel class if necessary, and returns the type ID
 * associated to it.
 * 
 * Return value: The type ID of the &ETextModel class.
 **/
GtkType
e_text_model_get_type (void)
{
	static GtkType model_type = 0;

	if (!model_type) {
		GtkTypeInfo model_info = {
			"ETextModel",
			sizeof (ETextModel),
			sizeof (ETextModelClass),
			(GtkClassInitFunc) e_text_model_class_init,
			(GtkObjectInitFunc) e_text_model_init,
			NULL, /* reserved_1 */
			NULL, /* reserved_2 */
			(GtkClassInitFunc) NULL
		};

		model_type = gtk_type_unique (gtk_object_get_type (), &model_info);
	}

	return model_type;
}

/* Class initialization function for the text item */
static void
e_text_model_class_init (ETextModelClass *klass)
{
	GtkObjectClass *object_class;

	object_class = (GtkObjectClass *) klass;

	parent_class = gtk_type_class (gtk_object_get_type ());

	e_text_model_signals[E_TEXT_MODEL_CHANGED] =
		gtk_signal_new ("changed",
				GTK_RUN_LAST,
				object_class->type,
				GTK_SIGNAL_OFFSET (ETextModelClass, changed),
				gtk_marshal_NONE__NONE,
				GTK_TYPE_NONE, 0);
	
	gtk_object_class_add_signals (object_class, e_text_model_signals, E_TEXT_MODEL_LAST_SIGNAL);
	
	klass->changed = NULL;
	klass->get_text = e_text_model_real_get_text;
	klass->set_text = e_text_model_real_set_text;
	klass->insert = e_text_model_real_insert;
	klass->insert_length = e_text_model_real_insert_length;
	klass->delete = e_text_model_real_delete;
	
	object_class->destroy = e_text_model_destroy;
}

/* Object initialization function for the text item */
static void
e_text_model_init (ETextModel *model)
{
	model->text = NULL;
}

/* Destroy handler for the text item */
static void
e_text_model_destroy (GtkObject *object)
{
	ETextModel *model;

	g_return_if_fail (object != NULL);
	g_return_if_fail (E_IS_TEXT_MODEL (object));

	model = E_TEXT_MODEL (object);

	if (model->text)
		g_free (model->text);

	if (GTK_OBJECT_CLASS (parent_class)->destroy)
		(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}

static gchar *
e_text_model_real_get_text(ETextModel *model)
{
	return model->text;
}

static void
e_text_model_real_set_text(ETextModel *model, gchar *text)
{
	if (model->text)
		g_free(model->text);
	model->text = g_strdup(text);
	e_text_model_changed(model);
}

static void
e_text_model_real_insert(ETextModel *model, gint position, gchar *text)
{
	gchar *temp = g_strdup_printf("%.*s%s%s", position, model->text, text, model->text + position);
	if (model->text)
		g_free(model->text);
	model->text = temp;
	e_text_model_changed(model);
}

static void
e_text_model_real_insert_length(ETextModel *model, gint position, gchar *text, gint length)
{
	gchar *temp = g_strdup_printf("%.*s%.*s%s", position, model->text, length, text, model->text + position);
	if (model->text)
		g_free(model->text);
	model->text = temp;
	e_text_model_changed(model);
}

static void
e_text_model_real_delete(ETextModel *model, gint position, gint length)
{
	memmove(model->text + position, model->text + position + length, strlen(model->text + position + length) + 1);
	e_text_model_changed(model);
}

void
e_text_model_changed(ETextModel *model)
{
	g_return_if_fail (model != NULL);
	g_return_if_fail (E_IS_TEXT_MODEL (model));

	gtk_signal_emit (GTK_OBJECT (model),
			 e_text_model_signals [E_TEXT_MODEL_CHANGED]);
}

gchar *
e_text_model_get_text(ETextModel *model)
{
	g_return_val_if_fail (model != NULL, NULL);
	g_return_val_if_fail (E_IS_TEXT_MODEL (model), NULL);

	if ( E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->get_text )
		return E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->get_text(model);
	else
		return "";
}

void
e_text_model_set_text(ETextModel *model, gchar *text)
{
	g_return_if_fail (model != NULL);
	g_return_if_fail (E_IS_TEXT_MODEL (model));

	if ( E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->set_text )
		E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->set_text(model, text);
}

void
e_text_model_insert(ETextModel *model, gint position, gchar *text)
{
	g_return_if_fail (model != NULL);
	g_return_if_fail (E_IS_TEXT_MODEL (model));

	if ( E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->insert )
		E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->insert(model, position, text);
}

void
e_text_model_insert_length(ETextModel *model, gint position, gchar *text, gint length)
{
	g_return_if_fail (model != NULL);
	g_return_if_fail (E_IS_TEXT_MODEL (model));

	if ( E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->insert_length )
		E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->insert_length(model, position, text, length);
}

void
e_text_model_delete(ETextModel *model, gint position, gint length)
{
	g_return_if_fail (model != NULL);
	g_return_if_fail (E_IS_TEXT_MODEL (model));

	if ( E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->delete )
		E_TEXT_MODEL_CLASS(GTK_OBJECT(model)->klass)->delete(model, position, length);
}

ETextModel *
e_text_model_new(void)
{
	ETextModel *model = gtk_type_new (e_text_model_get_type ());
	model->text = g_strdup("");
	return model;
}
>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=baab4eeadc5677107e87d34071f0a30e5705deeb'>User Docs: Add 3.6 location for account settings</a></td><td>Andre Klapper</td><td><span title='2012-06-09 13:03:49 +0800'>2012-06-09</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+6</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=e3b070dea4caae74436763768bb98c886827b4e9'>User Docs: Update Message Templates help</a></td><td>Andre Klapper</td><td><span title='2012-06-09 10:45:30 +0800'>2012-06-09</span></td><td>1</td><td><span class='deletions'>-4</span>/<span class='insertions'>+15</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=fce0bdb9cf33d0761997fe83bbf84af2b499c4b7'>Updated German help translation</a></td><td>Christian Kirbach</td><td><span title='2012-05-29 05:46:17 +0800'>2012-05-29</span></td><td>1</td><td><span class='deletions'>-53</span>/<span class='insertions'>+264</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=f727f7041e96e7b5154d598321264850cd98b3c3'>Updated French doc translation</a></td><td>Bruno Brouard</td><td><span title='2012-05-20 03:37:25 +0800'>2012-05-20</span></td><td>1</td><td><span class='deletions'>-5</span>/<span class='insertions'>+16</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=57e81be5456f8c8bdc578179c35db000c9884b1a'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-04-27 18:58:24 +0800'>2012-04-27</span></td><td>1</td><td><span class='deletions'>-5</span>/<span class='insertions'>+22</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=32d93d628ef417eb6ea088260fffe94c900f6dc5'>User Docs: Fix logic to not display empty &lt;note&gt; containers on library.gnome.org</a></td><td>Andre Klapper</td><td><span title='2012-04-25 19:42:14 +0800'>2012-04-25</span></td><td>3</td><td><span class='deletions'>-23</span>/<span class='insertions'>+23</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=9391340420877a21da3d552c2785b5ea7dc0efd2'>Revert "User Docs: Cover the Magic Spacebar"</a></td><td>Andre Klapper</td><td><span title='2012-04-25 18:13:08 +0800'>2012-04-25</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=391db81e51dc418223359c4e650b88f1750d0ba7'>User Docs: Cover the Magic Spacebar</a></td><td>Andre Klapper</td><td><span title='2012-04-25 18:11:19 +0800'>2012-04-25</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=397b15ff4aa5afd1d5c7e0a093a33616624401cf'>Updated French doc translation</a></td><td>Bruno Brouard</td><td><span title='2012-04-21 21:39:31 +0800'>2012-04-21</span></td><td>1</td><td><span class='deletions'>-6</span>/<span class='insertions'>+6</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=837d1ebdd22e596237a617d92c68140013b62486'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-04-20 23:32:22 +0800'>2012-04-20</span></td><td>1</td><td><span class='deletions'>-13</span>/<span class='insertions'>+10</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=d15cd735886c38ac4c14faa816c307ce8f388844'>Updated French doc translation</a></td><td>Bruno Brouard</td><td><span title='2012-03-31 22:29:14 +0800'>2012-03-31</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+10</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=0828dc9d87a059bae8f994752b57be5d86080218'>[l10n] Updated German doc translation</a></td><td>Mario Blättermann</td><td><span title='2012-03-27 02:43:01 +0800'>2012-03-27</span></td><td>1</td><td><span class='deletions'>-960</span>/<span class='insertions'>+1525</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=945e8fa404b369b5c2104bc09970fc3f6b97834d'>Updated spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-03-26 23:54:10 +0800'>2012-03-26</span></td><td>1</td><td><span class='deletions'>-26</span>/<span class='insertions'>+16</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=3a23eb9fd45924f6ce52d1b4c1e616c1f064f206'>User docs: Fix typo. Fixes bug #672764</a></td><td>Andre Klapper</td><td><span title='2012-03-26 17:55:21 +0800'>2012-03-26</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=657dc76e2ecb4bd7365c4c6c0b34db4fd8e138a5'>Added Telugu help Translations</a></td><td>Sasi Bhushan</td><td><span title='2012-03-25 19:41:43 +0800'>2012-03-25</span></td><td>2</td><td><span class='deletions'>-1</span>/<span class='insertions'>+10385</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=f11bffc065b89a6869784fcda9821fe1c682ef7d'>Updated French doc translation</a></td><td>Bruno Brouard</td><td><span title='2012-03-24 22:30:46 +0800'>2012-03-24</span></td><td>1</td><td><span class='deletions'>-16995</span>/<span class='insertions'>+5975</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=572d2e9e33025ad4469564c28af85cdca24f711f'>Updated Hungarian translation</a></td><td>Gabor Kelemen</td><td><span title='2012-03-20 03:49:21 +0800'>2012-03-20</span></td><td>1</td><td><span class='deletions'>-821</span>/<span class='insertions'>+1340</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=70c92573c34c13e48ab75d578a2a3d86f6681a0d'>Updated German help translation</a></td><td>Christian Kirbach</td><td><span title='2012-03-15 05:12:05 +0800'>2012-03-15</span></td><td>1</td><td><span class='deletions'>-41</span>/<span class='insertions'>+104</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=1e5084fc2c1878c064cad94298b563f21fe19428'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-03-10 00:47:31 +0800'>2012-03-10</span></td><td>1</td><td><span class='deletions'>-69</span>/<span class='insertions'>+52</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=03146ee0d0b9606f673f14de05a0320946b17413'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-03-08 21:05:46 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-66</span>/<span class='insertions'>+20</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=0e53f1a93a768f7d385a63e7052a998c2454427e'>User Docs: Link 'Deleting attachments' into Attachments overview page. See bu...</a></td><td>Andre Klapper</td><td><span title='2012-03-08 19:52:53 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=9535e209b776bc8b062f9010216750e388cdb2ee'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-03-08 01:32:06 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-358</span>/<span class='insertions'>+559</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=ee82d456d057ac63ff3e9193d8bbe882bf02192c'>User Docs: Clarify Bogofilter usage again. Fixes bug #665008</a></td><td>Andre Klapper</td><td><span title='2012-03-08 01:09:05 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=ea3c3ad448447fa668a96b79ea55c8758c370776'>User Docs: Rewrite Spam Marking. Fixes bug #665008</a></td><td>Andre Klapper</td><td><span title='2012-03-08 01:09:05 +0800'>2012-03-08</span></td><td>2</td><td><span class='deletions'>-8</span>/<span class='insertions'>+19</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=d04c2d3a9bb26563e1b854773e7b9a106eeae33c'>User Docs: Explain how Bogofilter and SpamAssassin work and link to their FAQ...</a></td><td>Andre Klapper</td><td><span title='2012-03-08 01:09:05 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+12</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=50f6a77742027c624b3bf75577fb00bf38a70a95'>User Docs: Move page to Advanced section</a></td><td>Andre Klapper</td><td><span title='2012-03-08 00:34:31 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=d98b3aa72067342f10609b18b909439eed9f2bb1'>User Docs: Add page about message source and all mail headers view</a></td><td>Andre Klapper</td><td><span title='2012-03-08 00:34:05 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+26</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=28a932ae70795cef1b2e6185ebb5c2f8bdb123d5'>User Docs: Add 'Advanced' section for Message Displaying to dump all the Head...</a></td><td>Andre Klapper</td><td><span title='2012-03-08 00:27:51 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+5</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=b64654ff48673a4c9343f648c69144986a6fd9d4'>User Docs: Remove Source and Headers stuff from 'Message list sorting' sectio...</a></td><td>Andre Klapper</td><td><span title='2012-03-08 00:24:34 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-4</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=881d48edf7c2c10b95e99f5911f1c0fbd64323a6'>User Docs: Explain order in mail folder list pane and how to change. Fixes bu...</a></td><td>Andre Klapper</td><td><span title='2012-03-08 00:23:45 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+43</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=461ff1da7be7fdccbc2802d256a567d8d0391e56'>User Docs: Link also into mail-layout-changing</a></td><td>Andre Klapper</td><td><span title='2012-03-08 00:15:33 +0800'>2012-03-08</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=897096e1cd838abc30e08492448b928e0d5b2c5a'>User Docs: Fix wrong syntax</a></td><td>Andre Klapper</td><td><span title='2012-03-07 23:57:38 +0800'>2012-03-07</span></td><td>2</td><td><span class='deletions'>-5</span>/<span class='insertions'>+5</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=22835d039a06585a73e947885d44e5be3e768d35'>User Docs: Add missing markup</a></td><td>Andre Klapper</td><td><span title='2012-03-07 23:54:37 +0800'>2012-03-07</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=1e4944fdcf78b76b4f622fb28c0554c3dc63af35'>User Docs: Mention 'Apply the same view settings to all folders' mail setting...</a></td><td>Andre Klapper</td><td><span title='2012-03-07 23:49:43 +0800'>2012-03-07</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+3</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=1afa9174feba7c1f884c28d3c74d084d749f021b'>User Docs: Use conditional processing for package install links; Add EWS to f...</a></td><td>Andre Klapper</td><td><span title='2012-03-07 23:42:21 +0800'>2012-03-07</span></td><td>6</td><td><span class='deletions'>-22</span>/<span class='insertions'>+110</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=48064b24b8806aad4510cd8268efd1e04b41f414'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-03-02 00:38:35 +0800'>2012-03-02</span></td><td>1</td><td><span class='deletions'>-45</span>/<span class='insertions'>+24</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=63720cc0d67daffe866ce698a7c144593cd6ac0f'>User Docs: Fix typo in last commit</a></td><td>Andre Klapper</td><td><span title='2012-02-29 23:53:43 +0800'>2012-02-29</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=a0c27bc771341efb2b3bf5016d631b4a3a0ae0e2'>User Docs: Directly link to Empathy help for using IRC</a></td><td>Andre Klapper</td><td><span title='2012-02-29 23:48:27 +0800'>2012-02-29</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=9deced1c187d8b3850987ab57576ad9f5309fbfb'>User Docs: Fix broken link</a></td><td>Andre Klapper</td><td><span title='2012-02-29 23:43:06 +0800'>2012-02-29</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=208035a29399d3da99ebf49fde87659681581186'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-02-22 00:57:35 +0800'>2012-02-22</span></td><td>1</td><td><span class='deletions'>-467</span>/<span class='insertions'>+427</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=c66e43f83a7c041db768b05e110c4a7b9c1a0c0e'>User Docs: Apparently l10n.gnome.org uses xml2po and ignores ITS stuff, so pu...</a></td><td>Andre Klapper</td><td><span title='2012-02-20 20:54:58 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-0</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=2bf535c7567b9f0df95f83492dcc6084be372d71'>User Docs: Mark names and emails as non-translatable</a></td><td>Andre Klapper</td><td><span title='2012-02-20 20:41:02 +0800'>2012-02-20</span></td><td>216</td><td><span class='deletions'>-568</span>/<span class='insertions'>+568</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=31040f588169a2c33c18f24befbd449e6bd88e74'>User Docs: Use ITS style instead of HTML comments</a></td><td>Andre Klapper</td><td><span title='2012-02-20 20:29:28 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=9265ae84abd56b6736b5200f27440b4645aef06f'>User Docs: Fix duplicated ID</a></td><td>Andre Klapper</td><td><span title='2012-02-20 20:15:41 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=1f2a07175533f02f70e44ef0cae56323d4941504'>User Docs: Add Translators section. Fixes bug #665813</a></td><td>Andre Klapper</td><td><span title='2012-02-20 20:14:19 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+8</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=887aa6d25e1f19363340a7ed8ddcb8a7ed6fa2cf'>User Docs: Exchange calendar Free/Busy info must be published to top-level ca...</a></td><td>Andre Klapper</td><td><span title='2012-02-20 18:52:14 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=294bd0eda42bdfe33d87475cc00c12eb5f9f5787'>Fixed a build break in help/</a></td><td>Chenthill Palanisamy</td><td><span title='2012-02-20 17:46:02 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=4a3e2f0c9b72ba4d0b4d56628d1610d370db23e1'>Bug 670414 - Whitespace following backslash in Makefile.am</a></td><td>Jiro Matsuzawa</td><td><span title='2012-02-20 11:08:20 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+1</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=f7af0ccc23b7a7b3818b0073e627ff87707f9459'>Updated Spanish translation</a></td><td>Daniel Mustieles</td><td><span title='2012-02-20 04:14:48 +0800'>2012-02-20</span></td><td>1</td><td><span class='deletions'>-328</span>/<span class='insertions'>+530</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=9aa992451a4d66f2869e291613ed5402db132d2e'>User Docs: Add missing markup</a></td><td>Andre Klapper</td><td><span title='2012-02-20 02:40:22 +0800'>2012-02-20</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=3cf1c8d7a2c17aa2d6cb5e654d87bb55d5c5e53c'>User Docs: Document improved ways to add/edit mail accounts. Fixes bug #670301</a></td><td>Andre Klapper</td><td><span title='2012-02-20 02:38:48 +0800'>2012-02-20</span></td><td>13</td><td><span class='deletions'>-40</span>/<span class='insertions'>+53</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=f32efd706a805769fb051057caec0eb51057f954'>User Docs: Update list of files in Makefile.am</a></td><td>Andre Klapper</td><td><span title='2012-02-19 23:06:53 +0800'>2012-02-19</span></td><td>1</td><td><span class='deletions'>-1</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=86ca4a709f6b058ec0250aae91790a46359c321f'>User Docs: Add sorting for available Exchange providers. Fixes bug #670389</a></td><td>Andre Klapper</td><td><span title='2012-02-19 22:11:45 +0800'>2012-02-19</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=f081ff30fef343d77db3b39315ad32c2f76d304e'>User Docs: Remove outdated info about version specific common errors</a></td><td>Andre Klapper</td><td><span title='2012-02-19 21:59:02 +0800'>2012-02-19</span></td><td>2</td><td><span class='deletions'>-79</span>/<span class='insertions'>+0</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=835e4e7ed045183778e77a6854ee7e02382eac77'>User Docs: Fix several issues. See bug #670389</a></td><td>Andre Klapper</td><td><span title='2012-02-19 21:55:24 +0800'>2012-02-19</span></td><td>10</td><td><span class='deletions'>-28</span>/<span class='insertions'>+21</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=4d1e47dc88e9e5357430016ab7c1ada79c21e4c0'>User Docs: Fix typos in intro-application</a></td><td>Ekaterina Gerasimova</td><td><span title='2012-02-19 17:16:56 +0800'>2012-02-19</span></td><td>1</td><td><span class='deletions'>-3</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=31769d2b0b56ebe71d932265e2315fed0687854b'>Updated Hungarian help translation</a></td><td>Gabor Kelemen</td><td><span title='2012-02-19 10:03:21 +0800'>2012-02-19</span></td><td>1</td><td><span class='deletions'>-280</span>/<span class='insertions'>+154</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=b1fb55ce6cd29e0e2b410b6e6eab440073947e14'>User Docs: Fix a typo</a></td><td>Andre Klapper</td><td><span title='2012-02-19 00:22:10 +0800'>2012-02-19</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=65b060c400d7d41c5ff98f8397b293f98502da69'>User Docs: Update gconf locations to GSettings/dconf</a></td><td>Andre Klapper</td><td><span title='2012-02-19 00:15:09 +0800'>2012-02-19</span></td><td>3</td><td><span class='deletions'>-9</span>/<span class='insertions'>+21</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=a29661dce958cce11a8a5e51be0a69c241f707c3'>User docs: Fix broken sentence</a></td><td>Andre Klapper</td><td><span title='2012-02-19 00:01:31 +0800'>2012-02-19</span></td><td>1</td><td><span class='deletions'>-2</span>/<span class='insertions'>+2</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=922f6a3eabfb528fb1ccddf9b5d163aebe501e3f'>User Docs: Fix inappropriate usage of &lt;em&gt; tags</a></td><td>Andre Klapper</td><td><span title='2012-02-18 23:43:21 +0800'>2012-02-18</span></td><td>9</td><td><span class='deletions'>-17</span>/<span class='insertions'>+17</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=22041b003278b6faf3bdf296ce34c77fcb417201'>User Docs: Fix broken markup</a></td><td>Andre Klapper</td><td><span title='2012-02-18 22:03:27 +0800'>2012-02-18</span></td><td>2</td><td><span class='deletions'>-4</span>/<span class='insertions'>+4</span></td></tr>
<tr><td class='commitgraph'>* </td><td><a href='/~lantw44/cgit/gsoc2013-evolution/commit/help?h=EVOLUTION_3_5_4&amp;id=eb86dc0d48c88b626a40a90db3448f8a4f42421a'>User Docs: Fix inappropriate usage of &lt;code&gt; tag</a></td><td>Andre Klapper</td><td><span title='2012-02-18 22:02:11 +0800'>2012-02-18</span></td><td>6</td><td><span class='deletions'>-12</span>/<span class='insertions'>+12</span></td></tr>