Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

макрос для NEdit

Не буду будоражить спор о том какой текстовый редактор для Linux
лучше, но мне пока понравился NEdit - не консольный, простой и удобный
для быстрого перехода от windows-редакторов, есть подсветка
синтаксиса, возможность запуска внешней команды, и создание макросов.

Вот именно с помощью макросов можно "добить" ту функциональность,
которая могла потеряться при переходе от привычного windows-редактора.

Итак, здесь небольшой макрос для организации форматирования абзаца с
фиксированной правой границей (полное заполнение по ширине),
возможностью "красной строки". Правая граница берется из параметра
редактора "Wrap Margin" (может изменяться пользователем), "красная
строка" запрашивается интерактивно. Форматирование может применяться
как к выделенному фрагменту, так и ко всему тексту.

начало макроса # Constants
first_line=string_dialog("Indent first line:", "OK", "Cancel")
if ($string_dialog_button == 1) {
if (first_line == "")
first_line = 4
}
else
return
right_margin = $wrap_margin

# Congigure
if ($selection_start == -1) {
text_begin = 1
text_end = $text_length
}
else {
text_begin = $selection_start
text_end = $selection_end
}

# String for add to begining of line
Tmp = ""
for (i = 0; i < first_line; i++)
Tmp = Tmp " "
Tmp = Tmp "&"

if ($selection_start == -1) {
# Delete space begining every line
replace_all("^\\s+(.*)", "\\1", "regex")
# Foramting syntax after "." and ","
replace_all("([.,?!;])(\\w)", "\\1 \\2", "regex")
# Change two or more space to one
replace_all("(\\s{2,})", " ", "regex")
# Delete space ending line
replace_all("\\s\n", "\n", "regex")
# Delete space beginning empty line
replace_all("^\\s\n", "\n", "regex")
# Delete CR from between two lines of one paragraph
replace_all("(.)\n(.)", "\\1 \\2", "regex")
# Add space in begin paragraph
replace_all("^.+$", Tmp, "regex")
}
else {
# Delete space begining every line
replace_in_selection("^\\s+(.*)", "\\1", "regex")
# Foramting syntax after "." and ","
replace_in_selection("([.,])(\\w)", "\\1 \\2", "regex")
# Change two or more space to one
replace_in_selection("(\\s{2,})", " ", "regex")
# Delete space ending line
replace_in_selection("\\s\n", "\n", "regex")
# Delete space beginning empty line
replace_in_selection("^\\s\n", "\n", "regex")
# Delete CR from between two lines of one paragraph
replace_in_selection("(\\w)\n(\\w)", "\\1 \\2", "regex")
# Add space in begin paragraph
replace_in_selection("^.+$", Tmp, "regex")
}

# Formating paragraph
i = text_begin
LineCounter = 1
LongWord = 0
LastLine = text_begin - 2
for (;;) {
CurCh=get_character(i)
# Symbol CR is new paragraph
if (CurCh == "\n") {
LineCounter = 1
LastLine = i
}
else {
# Searching for of the last full word
# terminating one line of the paragraph
if (CurCh == " ") {
LastWord = i
# If previous word too long that CR is put after it
if (LongWord == 1) {
replace_range(LastWord, LastWord+1, "\n")
LineCounter = 0
LongWord = 0
LastLine = LastWord
}
}
# Justification SPACE on width
if (LineCounter == right_margin + 1) {
# If previous word not too big
if (i - LastWord < right_margin) {
# Cutting on last full word
replace_range(LastWord, LastWord+1, "\n")
i = LastWord
# Filling space if line not one word
CountChCurLine = LastWord - LastLine
if (CountChCurLine < right_margin+ 1) {
j = LastLine + 2
Tmp = 1
while (i - LastLine - 1 < right_margin) {
if (search_string(get_range(j-1, j+1), "[^\\s]\\s", 0, "regex") !=
-1) {
replace_range(j, j+1, " ")
i++
text_end++
Tmp = 0
}
j++
if (j == i) {
if ( Tmp == 1)
break
j = LastLine + 2
}
}
}
LastLine = i
LineCounter = 0
}
else
LongWord = 1
}
LineCounter++
}
if (i++ > text_end)
break
}
конец макроса удачных экспериментов.

--
C уважением, Kolotov Alexandr aka mr. Эбола
отвечать: akmypo***@m*****.ru
ICQ: 100349254

| Registered Linux user # 236664 |
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.kirovlug-list@subscribe.ru
Отписать : mailto:comp.soft.linux.kirovlug--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Wed, 16 Jun 2004 10:24:36 +0400 (#170867)