Exemplo n.º 1
0
        private StringStatistics GetStatistics(TextIter start, TextIter end, bool include_strikethrough)
        {
            string str = "";

            if (include_strikethrough)
            {
                str = note.Buffer.GetText(start, end, false);
            } else
            {
                TextTagEnumerator enumerator =
                    new TextTagEnumerator (note.Buffer, "strikethrough");

                TextIter splice_start = start;
                TextIter splice_end = end;
                string splice = "";

                foreach (TextRange range in enumerator) {
                    if (range.Start.Offset > end.Offset)
                        break;

                    if (range.End.Offset < start.Offset)
                        continue;

                    str += splice;

                    if (range.Start.InRange (splice_start, splice_end))
                        splice = splice_start.GetVisibleText (range.Start);

                    if (!range.End.InRange (splice_start, splice_end))
                        splice_start = splice_end;
                    else
                        splice_start = range.End;
                }
                str += splice;
                str += splice_start.GetVisibleText (splice_end);
            }
            return GetTextStatistics (str);
        }
Exemplo n.º 2
0
		void OnNoteDeleted (object sender, Note deleted)
		{
			if (deleted == this.Note)
				return;

			if (!ContainsText (deleted.Title))
				return;

			string old_title_lower = deleted.Title.ToLower ();

			// Turn all link:internal to link:broken for the deleted note.
			NoteTag link_tag = Note.TagTable.LinkTag;
			NoteTag broken_link_tag = Note.TagTable.BrokenLinkTag;
			TextTagEnumerator enumerator = new TextTagEnumerator (Buffer, link_tag);
			foreach (TextRange range in enumerator) {
				if (range.Text.ToLower () != old_title_lower)
					continue;

				Buffer.RemoveTag (link_tag, range.Start, range.End);
				Buffer.ApplyTag (broken_link_tag, range.Start, range.End);
			}
		}
Exemplo n.º 3
0
		void OnTagChanged (object sender, Gtk.TagChangedArgs args)
		{
			NoteTag note_tag = args.Tag as NoteTag;
			if (note_tag != null) {
				TextTagEnumerator enumerator =
				        new TextTagEnumerator (this, note_tag);
				foreach (TextRange range in enumerator) {
					WidgetSwap (note_tag, range.Start, range.End, true);
				}
			}
		}
Exemplo n.º 4
0
Arquivo: Note.cs Projeto: GNOME/tomboy
		private void HandleLinkRename (string old_title, Note renamed, bool rename_links)
		{
			// Check again, things may have changed
			if (!ContainsText (old_title))
				return;

			string old_title_lower = old_title.ToLower ();

			NoteTag link_tag = TagTable.LinkTag;

			// Replace existing links with the new title.
			TextTagEnumerator enumerator = new TextTagEnumerator (Buffer, link_tag);
			foreach (TextRange range in enumerator) {
				if (range.Text.ToLower () != old_title_lower)
					continue;

				if (!rename_links) {
					Logger.Debug ("Removing link tag from text '{0}'",
					              range.Text);
					Buffer.RemoveTag (link_tag, range.Start, range.End);
				} else {
					Logger.Debug ("Replacing '{0}' with '{1}'",
					              range.Text,
					              renamed.Title);
					Gtk.TextIter start_iter = range.Start;
					Gtk.TextIter end_iter = range.End;
					Buffer.Delete (ref start_iter, ref end_iter);
					start_iter = range.Start;
					Buffer.InsertWithTags (ref start_iter, renamed.Title, link_tag);
				}
			}
		}