Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.03.2011, 10:29
Aloran вне форума Посмотреть профиль Отправить личное сообщение для Aloran Найти все сообщения от Aloran
  № 1  
Ответить с цитированием
Aloran

Регистрация: May 2009
Сообщений: 223
Записей в блоге: 1
По умолчанию [FD] Удаление лишних пробелов

Подскажите как настроить FD, так что бы, при сохранении файла, удалялись все лишние пробелы?
Что бы данный код:
Код AS3:
....
    private function function1():uint
    {
        var var1:uint = 0;....
        var var2:uint = 1;
........
        return var1 + var2;
    }
....
    private function function2():void....
    {
        var var1:uint = function1();
........
        function3(var1, "string");............
    }
....
превратился в такой:
Код AS3:
 
    private function function1():uint
    {
        var var1:uint = 0;
        var var2:uint = 1;
 
        return var1 + var2;
    }
 
    private function function2():void
    {
        var var1:uint = function1();
 
        function3(var1, "string");
    }
. - пробел который надо удалить
P.S.: код написан от балды =)

Старый 18.03.2011, 12:10
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Добавьте в меню новый макрос LiteFormat.cs
Код:
using System;
using PluginCore;
using System.Text.RegularExpressions;

public class LiteFormat {
	public static void Execute () {
		ScintillaNet.ScintillaControl sci = PluginBase.MainForm.CurrentDocument.SciControl;
		if (sci == null) {
			/// document not editable
			return;
		}
		/// WARNING: reading/writing sci.Text property is slow
		string src = sci.Text;
		src = new Regex (@"(    )(?<!\r\n)").Replace (src, "	");
		src = new Regex (@"\r\n([\t ]+)?\r\n").Replace (src, "\r\n");
		src = new Regex (@"( +)?\r\n(\t+)?{").Replace (src, " {");
		src = new Regex (@"}\r\n([\t ]+)?(catch|else|finally)").Replace (src, "} $2");
		src = new Regex (@"}([\t ]*)(else|finally)([\t ]*){").Replace (src, "} $2 {");
		src = new Regex (@"([\w\d$])\(").Replace (src, "$1 (");
		sci.Text = src;
	}
}
Запускается через
Код:
ExecuteScript|Development;$(BaseDir)\Macros\LiteFormat.cs
В принципе, вам нужны только первые два Regex, они отвечают за пробелы и пустые строки.
Следующие три за положение {} на одной строке, а не на новой.
Последний ставит пробел между именем метода и ()
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 18.03.2011 в 12:13.
Старый 18.03.2011, 13:12
Aloran вне форума Посмотреть профиль Отправить личное сообщение для Aloran Найти все сообщения от Aloran
  № 3  
Ответить с цитированием
Aloran

Регистрация: May 2009
Сообщений: 223
Записей в блоге: 1
Что то не выходит.
- создаю LiteFormat.cs с вашим кодом
- сохраняю его в $(BaseDir)\Macros\LiteFormat.cs, где $(BaseDir) корень FD
- ctrl+F10 в FD, создаю новый макрос
- открываю entries нового макроса и пишу туда ExecuteScript|Development;$(BaseDir)\Macros\LiteFormat.cs
- юзаю этот макрос в файле и ничего не происходит

что я делаю не так?

Старый 18.03.2011, 14:05
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
А другие макросы работают?
Данный макрос рабочий, сам для себя делал, чтобы делать код читабельным.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 18.03.2011, 14:16
Aloran вне форума Посмотреть профиль Отправить личное сообщение для Aloran Найти все сообщения от Aloran
  № 5  
Ответить с цитированием
Aloran

Регистрация: May 2009
Сообщений: 223
Записей в блоге: 1
Разобрались... дело в том что у нас в классах конец строки только LF.
Пришлось кое что изменить, вот наш рабочий макрос:
Код:
using System;
using PluginCore;
using System.Text.RegularExpressions;

public class LiteFormat
{
    public static void Execute ()
    {
        ScintillaNet.ScintillaControl sci = PluginBase.MainForm.CurrentDocument.SciControl;
        if (sci == null)
        {
            /// document not editable
            return;
        }

        /// WARNING: reading/writing sci.Text property is slow
        string src = sci.Text;
        src = new Regex (@"\t", RegexOptions.Multiline).Replace (src, "    ");
        src = new Regex (@" +$", RegexOptions.Multiline).Replace (src, "");
        sci.Text = src;
    }
}
Вопрос теперь в том как сделать так, что бы сей макрос работал всегда перед сохранением, а не только от хоткеев?


Последний раз редактировалось Aloran; 18.03.2011 в 14:23.
Старый 18.03.2011, 14:33
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
дело в том что у нас в классах конец строки только LF.
Ааа ) Я то работают с \r\n

Легко Написать макрос, который вызывает этот макрос и делает сохранение, а потом отобрать Control|S у Label.Save в MainMenu.xml и назначить его этому макросу)
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 18.03.2011, 18:16
Aloran вне форума Посмотреть профиль Отправить личное сообщение для Aloran Найти все сообщения от Aloran
  № 7  
Ответить с цитированием
Aloran

Регистрация: May 2009
Сообщений: 223
Записей в блоге: 1
спасибо большое iNils !!!

Добавлено через 18 часов 46 минут
iNils вдогонку еще один маленький вопрос: какой код надо дописать в макрос, что бы курсор остался на прежнем месте, а не убегал в начало файла? (а то с С# я не дружу)

Старый 20.03.2011, 10:04
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
какой код надо дописать в макрос, что бы курсор остался на прежнем месте, а не убегал в начало файла? (а то с С# я не дружу)
Я так понимаю, что строки пустые вы не удаляете?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 20.03.2011, 12:29
Aloran вне форума Посмотреть профиль Отправить личное сообщение для Aloran Найти все сообщения от Aloran
  № 9  
Ответить с цитированием
Aloran

Регистрация: May 2009
Сообщений: 223
Записей в блоге: 1
нет не удаляю, т.к. они служат для визуального разделения блоков кода внутри функций

Старый 20.03.2011, 22:36
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Значит так. Запоминаем текущую строку перед заменой.
Код:
int line = sci.LineFromPosition(sci.CurrentPos);
Потом, после установки текста, ее возвращаем.
Код:
sci.Text = src;
sci.GotoLine (line);
Но! Курсор будет в начале строки. Почему? Потому, что у нас будут изменения в числе общих символов (например табы на пробелы сменили), и чтобы позиционировать курсор по символам, надо будет производить ряд манипуляций, по запоминанию текста строки и восстановлении по нему позиции, а мне сейчас эти делать лень
Если вам нужно точное восстановление позиции, то скачайте исходники FD, найдите там файл trunk\FD3\PluginCore\ScintillaNet\ScintillaControl.cs и получите все методы и свойства Scintilla.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 20.03.2011 в 22:39.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:54.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.