Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: SynPlus 
Author Message
Vitalik



PostPosted: Wed Jul 19, 2006 15:53    Post subject: Reply with quote

Моторокер wrote:
Получается, что старые версии плагина будут ругаться на новый файл?

Угумс Crying or Very sad

Моторокер wrote:
В xml вроде удобно сделать игнор новых тэгов старыми версиями?

Совершенно верно, если изменения какие-то незначительные, например, добавлено новое свойство или даже целый тег, то старые версии преспокойно читали бы этот формат.
Например, если бы новая версия плагина была уже выпущена, то после добавления этой возможности (фиксированная длина набора символов) эта выпущенная версия все равно могла бы открывать новые файлы (файлы с этой возможнстью)

Моторокер wrote:
Или это не новые тэги, а как-то изменённые старые? КашаNew=МаслоOld?

Да, но дело даже не только в таких мелких исправлениях.
Изменена сама структура xml-файла. Причем изменена кардинально. Сейчас приведу маленькие примеры с комментариями Wink

Во-первых, жил да был раньше самый первый формат файла. От версии плагина SynPlus 2.0b1 до 2.3 он хорошел и развивался, но кардинально не менялся (просто добавлялись новые свойства и правила как новые теги в файле). Сам формат файла (можно сказать) изменялся от 1.0 до 1.5, вот небольшой его кусочек (здесь только информация о подсветке, один диапазон, один список ключевых слов и один набор символов):
Code:
<UniHighlighter>
 <ImportantInfo>
  ******* Please read carefully *************************
  * Please, make any changes in this file very carefuly!*
  * It is much more convinient to use native designer!  *
  *******************************************************
 </ImportantInfo>
 <Info>
  <General>
   <Name>Sample file</Name>
   <FileTypeName>TXT</FileTypeName>
   <Layout>Standard</Layout>
  </General>
  <Author>
   <Name>Vitalik</Name>
   <Email>vetal-x@mail.ru</Email>
   <Web></Web>
   <Copyright>© Vitaly Lyapota, 2006</Copyright>
   <Company>N/A</Company>
   <Remark></Remark>
  </Author>
  <Version>
   <Version>1</Version>
   <Revision>3</Revision>
   <Date>38917,4941534606</Date>
   <Type>Beta</Type>
  </Version>
  <History>
  </History>
  <Sample>
   <S>Sample code here...</S>
   <S>Second line of sample code</S>
  </Sample>
 </Info>
 <SchemeIndex>0</SchemeIndex>
 <Schemes>
  <S>Vitalik</S>
 </Schemes>
 <Range Name="Root">
 <Attri>
  <Back>-2147483643</Back>
  <Fore>16711680</Fore>
  <Style></Style>
  <ParentForeground>False</ParentForeground>
  <ParentBackground>False</ParentBackground>
 </Attri>
 <Enabled>True</Enabled>
 <OpenSymbol></OpenSymbol>
 <OpenSymbolFinishOnEol>False</OpenSymbolFinishOnEol>
 <CloseSymbol></CloseSymbol>
 <CloseSymbolFinishOnEol>False</CloseSymbolFinishOnEol>
 <OpenSymbolStartLine>False</OpenSymbolStartLine>
 <CloseSymbolStartLine>False</CloseSymbolStartLine>
 <DelimiterChars>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~</DelimiterChars>
 <OpenSymbolPartOfTerm>Right</OpenSymbolPartOfTerm>
 <CloseSymbolPartOfTerm>False</CloseSymbolPartOfTerm>
 <CloseOnTerm>False</CloseOnTerm>
 <CloseOnEol>False</CloseOnEol>
 <AllowPredClose>False</AllowPredClose>
 <CaseSensitive>False</CaseSensitive>
 <KW Name="Some keywords">
  <Attri>
   <Back>-2147483643</Back>
   <Fore>16711680</Fore>
   <Style></Style>
   <ParentForeground>True</ParentForeground>
   <ParentBackground>True</ParentBackground>
  </Attri>
  <Enabled>True</Enabled>
  <W>keyword1</W>
  <W>keyword2</W>
  <W>keyword3</W>
 </KW>
  <Set Name="Numbers">
   <Attri>
    <Back>-2147483643</Back>
    <Fore>128</Fore>
    <Style></Style>
    <ParentForeground>False</ParentForeground>
    <ParentBackground>True</ParentBackground>
   </Attri>
   <Enabled>True</Enabled>
   <S>0123456789</S>
  </Set>
  <Range Name="Comments">
  <Attri>
   <Back>-2147483643</Back>
   <Fore>255</Fore>
   <Style></Style>
   <ParentForeground>False</ParentForeground>
   <ParentBackground>False</ParentBackground>
  </Attri>
  <Enabled>True</Enabled>
  <OpenSymbol>//</OpenSymbol>
  <OpenSymbolFinishOnEol>False</OpenSymbolFinishOnEol>
  <CloseSymbol></CloseSymbol>
  <CloseSymbolFinishOnEol>False</CloseSymbolFinishOnEol>
  <OpenSymbolStartLine>True</OpenSymbolStartLine>
  <CloseSymbolStartLine>False</CloseSymbolStartLine>
  <DelimiterChars>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~</DelimiterChars>
  <OpenSymbolPartOfTerm>Right</OpenSymbolPartOfTerm>
  <CloseSymbolPartOfTerm>False</CloseSymbolPartOfTerm>
  <CloseOnTerm>False</CloseOnTerm>
  <CloseOnEol>True</CloseOnEol>
  <AllowPredClose>False</AllowPredClose>
  <CaseSensitive>False</CaseSensitive>
  </Range>
 </Range>
 <CopyRight>Rule file for UniHighlighter Delphi component (Copyright(C) Fantasist(walking_in_the_sky@yahoo.com), Vit(nevzorov@yahoo.com), Vitalik(vetal-x@mail.ru), 2002-2004)</CopyRight>
</UniHighlighter>

Согласитесь, что уж больно "грузной" он какой-то. В смысле, что сильно большой, много избыточной (оберточной) информации...

Чтобы визуально "разгрузить" этот формат файла в SynPlus 2.4 был введен новый формат файла (условно можно назвать версию этого формата: 1.8), опять же приведу такой же аналогичный кусочек этого формата (тоже только информация о подсветке, один диапазон, один список ключевых слов и один набор символов):
Code:
<UniHighlighter version="1.8.1">
  <Info>
    <General Name="Sample file" Extensions="TXT"/>
    <Author Name="Vitalik" Email="vetal-x@mail.ru" Web="" Copyright="© Vitaly Lyapota, 2006" Company="N/A" Remark=""/>
    <Version Version="1" Revision="3" Date="38917,5138890625"/>
    <History>
    </History>
    <Sample>
      <S>Sample code here...</S>
      <S>Second line of sample code</S>
    </Sample>
  </Info>
  <Scheme File="" Name=""/>
  <Range Name="Root" Attributes="0,-2147483643;False:False." Style=""
         Delimiters="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~">
    <Rule/>
    <Keywords Name="Symbols" Attributes="16711680,-2147483643;True:True." Style="">
      <word value="keyword1"/>
      <word value="keyword2"/>
      <word value="keyword3"/>
    </Keywords>
    <Set Name="Numbers" Attributes="128,-2147483643;False:True." Style="" Symbols="0123456789"/>
    <Range Name="Comments" Attributes="255,-2147483643;False:False." Style=""
           Delimiters="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~">
      <Rule OpenSymbol="//" OpenSymbolStartLine="True" OpenSymbolPartOfTerm="Right" CloseOnEol="True"/>
  </Range>
  <CopyRight>Rule file for UniHighlighter Delphi component (Copyright(C) Fantasist(walking_in_the_sky@yahoo.com), Vit(nevzorov@yahoo.com), Vitalik(vetal-x@mail.ru), 2002-2004)</CopyRight>
</UniHighlighter>

Получился гораздо более элегантный формат, хотя и не лишенный своих недостатков (например, Attributes, как видно, хранились не очень красиво)

Такой формат файла продержался вплоть до версии SynPlus 2.7.3. В сентябре прошлого года вышла новая версия компонента подсветки (т.н. UniHighlighter 2.0 Alpha), но изменения в ней были слишком глобальные (отчасти из-за подключившегося к проекту Quadr0), чтобы его можно было легко встроить в плагин... Sad А затем начались учебные будни и я на очень долгий срок лишился времени на плагин.. Но вот опять лето! Над компонентом была проведена большая работа, а также над интеграцией компонента с плагином. Об изменениях на этом фронте можно наблюдать на форуме компонента: http://forum.vingrad.ru/index.php?showforum=170
Вобщем, в новой версии компонента формат файла сильно изменился и я думаю в лучшую сторону (хотя, опять же, есть и свои недостатки, например, многострочные тексты вынесены в атрибуты для ускорения считывания подсветки, но в файле это выглядит не совсем красиво): Smile
Code:
<?xml version="1.0" encoding="windows-1251"?>
<SynUniHighlighter Version="2.0">
   <SyntaxColoring>
      <Info>
         <General Name="Sample file" Extensions="TXT" Version="1" Revision="3" Sample="Sample code here...
Second line of sample code" History=""/>
         <Author Name="Vitalik" Mail="vetal-x@mail.ru" Web="" Copyright="© Vitaly Lyapota, 2006" Company="N/A" Remark=""/>
      </Info>
      <Schemes/>
      <Editor/>
      <MainRules Name="Root" Style="">
         <Attributes Foreground="clBlack" Background="$80000005"/>
         <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
         <SubRules>
            <Range Name="New" Style="">
               <Attributes Foreground="clRed" Background="$80000005" ParentForeground="True" ParentBackground="True"/>
               <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
               <OpenToken StartLine="True" PartOfTerm="True"/>
               <Properties CloseOnEol="True"/>
               <MultiTokens>
                  <Tokens Open="//"/>
               </MultiTokens>
               <SubRules/>
            </Range>
            <KeyList Name="Symbols" Enabled="True" Style="" Words="keyword1
keyword2
keyword3
">
               <Attributes Foreground="clBlue" Background="$80000005" ParentForeground="True" ParentBackground="True"/>
            </KeyList>
            <Set Name="Numbers" Enabled="True" Style="" Symbols="0123456789" Quantity="2">
               <Attributes Foreground="clMaroon" Background="$80000005" ParentBackground="True"/>
            </Set>
         </SubRules>
      </MainRules>
   </SyntaxColoring>
</SynUniHighlighter>


Моторокер wrote:
Новые версии плагина будут поддерживать старые подсветки? Будут ругаться? Придётся править всё заново?

Такую возможность я закодил в первую очередь Wink
Также как и SynPlus начиная с версии 2.4 понимает все предыдущие форматы вплоть до изначального, новый SynPlus будет иметь возможность беспроблемно считывать подсветки всех старых форматов Wink


P.S. Я уже сделал возможность сохранять подсветки в старом формате (который используется в последних SynPlus), осталось только это прикрутить к редактору подсветок и, может быть, к "менеджеру" подсветок Smile

P.P.S Что-то у меня этот форум не всегда загружается.. Поэтому и не мог так долго запостить ответ.. Sad
_________________
Добро пожаловать на http://www.unihighlighter.com
View user's profile Send private message Visit poster's website Yahoo Messenger ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group