Снегопат

Обсуждение Снегопата
Текущее время: 23 апр 2024, 18:29

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: 22 янв 2013, 11:48 
Не в сети
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:36
Сообщения: 1085
MaxDen писал(а):
А можно добавить пробел ПОСЛЕ равно?

я обычно добавляю пробел до и после равно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 янв 2013, 13:33 
Не в сети

Зарегистрирован: 24 авг 2011, 15:32
Сообщения: 722
Артур, он скорее всего имеет ввиду именно форматирование нескольких строк по знаку "равно". В текущем скрипте пробелы добавляются до этого знака.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 янв 2013, 02:43 
Не в сети

Зарегистрирован: 22 янв 2013, 05:13
Сообщения: 13
Откуда: Якутск
JohnyDeath писал(а):
Артур, он скорее всего имеет ввиду именно форматирование нескольких строк по знаку "равно". В текущем скрипте пробелы добавляются до этого знака.

Да именно так.
Пример до:
Код:
ОбластьСтроки=Области.ОбластьСтрокиТаблицыРасходовГруппа;
ОбластьЯчейки=Области.ОбластьЯчейкиТаблицыРасходовГруппа;


Пример после:
Код:
ОбластьСтроки     =Области.ОбластьСтрокиТаблицыРасходовГруппа;
ОбластьЯчейки     =Области.ОбластьЯчейкиТаблицыРасходовГруппа;


Хотелось бы(может просто еще один варинат форматирования добавить):
Код:
ОбластьСтроки = Области.ОбластьСтрокиТаблицыРасходовГруппа;
ОбластьЯчейки = Области.ОбластьЯчейкиТаблицыРасходовГруппа;


Или хотя-бы так:
Код:
ОбластьСтроки     = Области.ОбластьСтрокиТаблицыРасходовГруппа;
ОбластьЯчейки     = Области.ОбластьЯчейкиТаблицыРасходовГруппа;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 янв 2013, 08:47 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Ну, это несложно сделать.
Только тогда уже надо будет работу с настройками делать, чтобы настраиваемое поведение было.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 19 фев 2013, 09:05 
Не в сети
Аватара пользователя

Зарегистрирован: 07 фев 2012, 15:25
Сообщения: 86
Откуда: РБ
Цитата:
Код:
ОбластьСтроки     = Области.ОбластьСтрокиТаблицыРасходовГруппа;
ОбластьЯчейки     = Области.ОбластьЯчейкиТаблицыРасходовГруппа;

Именно так
И чтобы по несколько строкам подбирал самый правый "=" и по ним выравнивал остальные. При этом использовался TAB Для тех кто использует не Courier.

Код:
Стр             = "Как надо";
ОбластьЯчейки   = Области.ОбластьЯчейкиТаблицыРасходовГруппа;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 мар 2013, 03:19 
Не в сети

Зарегистрирован: 04 июн 2012, 09:28
Сообщения: 343
При использовании скрипта слетают точки останова.
См. видео: http://www.screencast.com/t/x4lELNGmC2

_________________
В реальності все не так, як насправді


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 22 мар 2013, 08:27 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 авг 2011, 15:04
Сообщения: 2052
Подтверждаю, буду разбираться.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 апр 2013, 12:53 
Не в сети

Зарегистрирован: 09 апр 2013, 18:01
Сообщения: 74
А можно предложить свои доработки для этого скрипта в репозитарий?

Мой вариант выравнивает знаки = и знаки ==, !=, <=, => = не разрывая их.
При этом выравнивание происходит не по дальнему знаку, а по минимально-необходимому расстоянию от самой длинной строчки кода. Т.е. картину вида
Код:
a___= 1
b______= 3
cdd__= 1

к
Код:
a___= 1
b___= 3
cdd_= 1


 Код
$engine JScript
Код:
$uname format_script
$dname Форматирование модуля

// (с) Александр Орефков orefkov@gmail.com
// Скрипт с разными полезными для форматирования текста модуля макросами

// проверяет наличие различных сочитаний со знаком равно в строке. >= <= != итд
function isEqCombination( inputLine )
{
   var line= { text: inputLine }
   eqPos   = line.text.indexOf("=")
   if ( eqPos >= 0 )
   {
      if (line.text.charAt( eqPos - 1 ) == ">" || line.text.charAt( eqPos - 1 ) == "<" ||
         line.text.charAt( eqPos - 1 ) == "=" || line.text.charAt( eqPos - 1 ) == "!" ||
         line.text.charAt( eqPos - 1 ) == "+" || line.text.charAt( eqPos - 1 ) == "-" )
         return true
      else
         return false
   }
   else                   
      return false
}

function fillLine(symbol, count)
{   
   if ( count < 0 )
      return ""      
    var text    = ""
    while(count--)
        text += symbol
    return text
}

function macrosTest()
{
   //проверки подготовки
    var txtWnd    = snegopat.activeTextWindow()
   if(!txtWnd)
   {
        return
   }
    var sel    = txtWnd.getSelection()
    var endRow    = sel.endRow   
    if(sel.endCol == 1)
        endRow--       
   
   // цикл по строчкам в поисках максимальной позиции знака Равно
    for(var l = sel.beginRow; l <= endRow; l++)
    {
        var line = {text: txtWnd.line(l)}
      position = getEqAdequatePosition( line.text )
    }
   
}

// минимально-необходимое размещение знака РАВНО
function getEqAdequatePosition( inputLine )
{   
    var tabSize   = profileRoot.getValue("ModuleTextEditor/TabSize");
   var line   = { text: inputLine }
   userfulIndex= firstUsefulOnTheLeft( inputLine )   
   position    = 0   
   for( var k = 0; k <= userfulIndex; k++ )
   {
      if( line.text.charAt(k) == "\t" )
         position=position + tabSize
      else
         position=position+1         
   }   
   return position;
}

// Найти в левой части присвоения индекс первого символа, который не является пробелом или табом.
// индексы в строках идут с 0.
function firstUsefulOnTheLeft( inputLine )
{      
   var line   = { text: inputLine }
   eqRealPos   = line.text.indexOf("=")
   
   if ( isEqCombination( line.text ) )
      searchPos = eqRealPos - 2
   else
      searchPos = eqRealPos - 1
      
   for( var k = searchPos; k >= 0; k-- )
   {
      if( line.text.charAt( k ) != "\t" && line.text.charAt( k ) != " "  )
         return k;         
   }
   
   return -1;
}
 
// какой символ РАВНО используется в строке. <=, != итд
function eqSymbolInLine( inputLine )
{
   combination   = "=";
   var line   = { text: inputLine }
   eqPos      = line.text.indexOf("=")   
   if ( isEqCombination( line.text ) )      
      combination = line.text.charAt(eqPos-1) + "=";
      
   return combination;
}

/*
 * Макрос для выравнивания знаков =
 * Выстраивает знаки = в выделенном тексте в одну колонку.
 *
 */

function macrosВыровнятьЗнакиРавно()
{   
   //проверки подготовки
    var txtWnd    = snegopat.activeTextWindow()
    if(!txtWnd)
        return
    var sel    = txtWnd.getSelection()
    var endRow    = sel.endRow
    if(sel.endCol == 1)
        endRow--
    if(endRow <= sel.beginRow)
        return
    var tabSize            = profileRoot.getValue("ModuleTextEditor/TabSize");
    var replaceTabOnInput   = profileRoot.getValue("ModuleTextEditor/ReplaceTabOnInput");
    lines               = new Array() // массив информации о строках
    var maxEqualPos         = -1 // максимальная позиция знака Равно
   
   // цикл по строчкам в поисках максимальной позиции знака Равно
    for(var l = sel.beginRow; l <= endRow; l++)
    {
        var line               = {text: txtWnd.line(l)}
        line.eqRealPos            = line.text.indexOf("=") // где в выделенной строчке знак равно?
      line.eqUsefulIndex         = firstUsefulOnTheLeft( line.text )   
      line.eqAdequatePosInSpaces   = getEqAdequatePosition( line.text )
      
      if( line.eqRealPos    >= 0 )
        {              
         line.shouldRender   = 1
         line.eqSymbolInLine   = eqSymbolInLine( line.text )
         if ( line.eqAdequatePosInSpaces > maxEqualPos )
               maxEqualPos = line.eqAdequatePosInSpaces
        }
      else
         line.shouldRender = 0
         
        lines.push(line)
    }   
   
   var text = ""                // результирующий текст, который будет вставлен вместо выделенного   
   maxEqualPos = maxEqualPos + 1; // увеличить на 1, чтобы гарантировать один символ таба или пробела до знака РАВНО
    if ( !replaceTabOnInput  ){
        maxEqualPos = Math.ceil( maxEqualPos/tabSize ) * tabSize;
    }      
   
   // цикл по выделенным строкам
   // пересобрать строку пересчитав символы до знака РАВНО
    for(var l in lines)
    {
        var line      = lines[ l ]
        var symbol      = replaceTabOnInput ? ' ':'\t'    // что вставлять. Либо пробелы либо табы               
      var symbolsNum   = (maxEqualPos - line.eqAdequatePosInSpaces) // количество символов(таб или пробел), которые именно для этой строки нужно добавить до дальнего знака равно.
      
        if (!replaceTabOnInput)
            symbolsNum = Math.ceil( symbolsNum/tabSize )
         
   
      if ( line.shouldRender )
      {            
         copyAmmount         = line.eqUsefulIndex + 1
         strBeforeEq         = line.text.substr( 0, copyAmmount )            
         strAfterEq         = line.text.substr( line.eqRealPos + 1 )
         additionalSymbols   = fillLine(symbol, symbolsNum)
           newLine            = strBeforeEq  + additionalSymbols + line.eqSymbolInLine + strAfterEq + "\n"
      }
      else
         newLine = line.text + "\n"
         
        text += newLine
    }
   
    txtWnd.setSelection(sel.beginRow, 1, endRow + 1, 1)
    txtWnd.selectedText = text
    txtWnd.setCaretPos(sel.beginRow+lines.length-1, newLine.length);
   
}

/*
 * Макрос для сдвига текста за символом | (для форматирования запросов)
 * Сдвигает текст вправо/влево вставляя/удаляя при этом заданный символ
 */
function MoveBlock(toLeft, spaceChar)
{   
    var txtWnd = snegopat.activeTextWindow()
    if(!txtWnd || txtWnd.isReadOnly)
        return
    var sel      = txtWnd.getSelection()
    var endRow   = sel.endRow
 //   if(sel.endCol == 1)
        endRow--
    if(endRow < sel.beginRow)
        return
    var text = ""
    for(var l = sel.beginRow; l <= endRow; l++)
    {
        var str         = txtWnd.line(l)
        var vlRealPos   = str.indexOf("|")
        if(vlRealPos >= 0)
        {
            if (toLeft) //to left
                str = str.replace("|" + spaceChar, "|")
            else //to right
                str = str.replace("|", "|" + spaceChar)
        }
        text += str + "\n"
    }
    txtWnd.setSelection(sel.beginRow, 1, endRow + 1, 1)
    txtWnd.selectedText = text
    txtWnd.setSelection(sel.beginRow, 1, endRow + 1, 1)
}
function macrosСдвинутьБлокВлевоНаПробел() //hotkey: ctrl+;
{
    MoveBlock(true, " ")
}
function macrosСдвинутьБлокВправоНаПробел() //hotkey: ctrl+'
{
    MoveBlock(false, " ")
}
function macrosСдвинутьБлокВлевоНаТаб() //hotkey: ctrl+shift+;
{
    MoveBlock(true, "\t")
}
function macrosСдвинутьБлокВправоНаТаб() //hotkey: ctrl+shift+'
{
    MoveBlock(false, "\t")
}

// Макрос удаляет white-space символы в конце строк, а также заменяет все \r\n на \n
function macrosУдалитьКонцевыеПробелы()
{
    var txtWnd = snegopat.activeTextWindow()
    if(!txtWnd || txtWnd.isReadOnly)
        return
    var replaces = 0, symbols = 0, crnl = 0
    var text = txtWnd.text.replace(/[ \t]+\r*\n/g, function(str)
        {
            replaces++
            symbols += str.length - 1
            if(str.length > 2 && str.charAt(str.length - 2) == '\r')
                crnl++, symbols--
            return '\n'
        }
    )
    if(replaces)
    {
        Message("Исправлено cтрок: " + replaces + "\nУбрано символов: " + symbols + "\nУбрано CR: " + crnl)
        var caretPos = txtWnd.getCaretPos()
        txtWnd.setSelection(1, 1, txtWnd.linesCount + 1, 1)
        txtWnd.selectedText = text;
        txtWnd.setCaretPos(caretPos.beginRow, caretPos.beginCol)
    }
    else
        Message("Все чисто")
}

/*
 * Макрос для выравнивания текста по первой запятой
 * Выстраивает знаки = в выделенном тексте в одну колонку.
 */
function macrosВыровнятьПоПервойЗапятой()
{
    var txtWnd = snegopat.activeTextWindow()
    if(!txtWnd)
        return
    var sel = txtWnd.getSelection()
    var endRow = sel.endRow
    if(sel.endCol == 1)
        endRow--
    if(endRow <= sel.beginRow)
        return
    var tabSize = profileRoot.getValue("ModuleTextEditor/TabSize")
    var replaceTabOnInput = profileRoot.getValue("ModuleTextEditor/ReplaceTabOnInput");
    lines = new Array()
    var maxEqualPos = -1
    for(var l = sel.beginRow; l <= endRow; l++)
    {
        var line = {text: txtWnd.line(l)}
        line.eqRealPos = line.text.indexOf(",")
        if(line.eqRealPos >= 0)
        {
            line.eqPosInSpaces = 0
            for(var k = 0; k < line.eqRealPos; k++)
            {
                if(line.text.charAt(k) == "\t")
                    line.eqPosInSpaces += tabSize - (line.eqPosInSpaces % tabSize)
                else
                    line.eqPosInSpaces++
            }
            if(line.eqPosInSpaces > maxEqualPos)
                maxEqualPos = line.eqPosInSpaces
        }
        lines.push(line)
    }
    var text = ""
    if (!replaceTabOnInput){
        maxEqualPos = Math.ceil(maxEqualPos/tabSize)*tabSize;
    }
    for(var l in lines)
    {

        var line = lines[l]

        var symbol   = replaceTabOnInput ? ' ':'\t';
        var count   = (maxEqualPos - line.eqPosInSpaces);
        if (!replaceTabOnInput){
            count = Math.ceil(count/tabSize);
        }

        //count = (count==0) ? 1 : count;

        var t1 = line.text.substr(0, line.eqRealPos + 1)
        var t2 = line.text.substr(line.eqRealPos + 1).replace(/^\s+/, "")
        newLine = t1 + fillLine(" ", maxEqualPos - line.eqPosInSpaces + 1) + t2 + "\n"
        text += newLine;

    }
    txtWnd.setSelection(sel.beginRow, 1, endRow + 1, 1)
    txtWnd.selectedText = text
    txtWnd.setCaretPos(sel.beginRow+lines.length-1, newLine.length);
}

function getPredefinedHotkeys(predef)
{
    predef.setVersion(0)
    predef.add("ВыровнятьЗнакиРавно", "Ctrl + =")
    predef.add("СдвинутьБлокВлевоНаПробел", "Ctrl + ;")
    predef.add("СдвинутьБлокВправоНаПробел", "Ctrl + '")
    predef.add("СдвинутьБлокВлевоНаТаб", "Ctrl + Shift + ;")
    predef.add("СдвинутьБлокВправоНаТаб", "Ctrl + Shift + '")
}


Закоммичено.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 28 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB