/* * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) version 3. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with the program; if not, see * * * Authors: * Jon Trowbridge * * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) * */ #ifdef HAVE_CONFIG_H #include #endif #include "e-text-model-repos.h" #define MODEL_CLAMP(model, pos) (CLAMP((pos), 0, strlen((model)->text))) gint e_repos_absolute (gint pos, gpointer data) { EReposAbsolute *info = (EReposAbsolute *) data; g_return_val_if_fail (data, -1); pos = info->pos; if (pos < 0) { gint len = e_text_model_get_text_length (info->model); pos += len + 1; } return e_text_model_validate_position (info->model, pos); } gint e_repos_insert_shift (gint pos, gpointer data) { EReposInsertShift *info = (EReposInsertShift *) data; g_return_val_if_fail (data, -1); if (pos >= info->pos) pos += info->len; return e_text_model_validate_position (info->model, pos); } gint e_repos_delete_shift (gint pos, gpointer data) { EReposDeleteShift *info = (EReposDeleteShift *) data; g_return_val_if_fail (data, -1); if (pos > info->pos + info->len) pos -= info->len; else if (pos > info->pos) pos = info->pos; return e_text_model_validate_position (info->model, pos); }