Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > Обсуждение нового формата файла в версии 2.0


Автор: Vitalik 3.8.2005, 19:41
В версии компонента SynUniHighlighter 2.0 (которая должна скоро увидеть свет) формат файла претерпел довольно серьзные изменения.

Причины этому:
• добавление мультитеговости (подробнее читайте http://forum.vingrad.ru/index.php?showtopic=59395);
• поддержка фолдинга кода (который скоро будет доступен в SynEdit);
• возвращение встроенных цветовых схем (но немного в другом виде);
• добавление некоторых дополнительных возможностей;
• улучшения для скорости считывания и удобства редактирования вручную.

Вот предварительная версия этого формата файла:
Цитата(SynUniHighlighter)
<?xml version="1.0" encoding="utf-8"?>
<SynUniHighlighter Version="2.0">
  <SyntaxColoring>
    <Info>
      <General Name="Name" Extensions="Ext" Version="0" Revision="0" Sample="" History=""/>
      <Author Name="Author" Mail="mail" Web="web" Copyright="Copy" Company="Comp" Remark=""/>
    </Info>
    <Schemes Current="0">
      <Scheme Name="Default">
        <Editor ActiveLineColor="clSilver" SelectedForeground="clWhite" SelectedBackground="clBlack"/>
        <Styles>
          <Style Name="Remarks" Foreground="clGray" Background="clWindow"/>
          <Style Name="Keywords" Foreground="clBlue" Background="clWindow"/>
          <Style Name="New" Foreground="clWindowText" Background="clWindow"/>
        </Styles>
      </Scheme>
    </Schemes>
    <Editor ActiveLineColor="clSilver" SelectedForeground="clWhite" SelectedBackground="clBlack"/>
    <MainRules Name="" Style="">
      <Attributes Foreground="clWindowText" Background="clWindow"/>
      <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
      <SubRules>
        <Range Name="Remark" Style="Remarks">
          <Attributes Foreground="clRed" Background="clWindow" Style="B"/>
          <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
          <OpenTag PartOfTerm="True" StartLine="False" FinishOnEol="False"/>
          <CloseTag PartOfTerm="True" StartLine="False" FinishOnEol="False"/>
          <Properties CloseOnTerm="False" CloseOnEol="True" AllowPredClose="True"/>
          <MultiTags>
            <Tags Open="&lt;" Close="&gt;"/>
            <Tags Open="{" Close="}"/>
          </MultiTags>
          <SubRules/>
        </Range>
        <KeyList Name="Keywords" Enabled="True" Style="Keywords" Words="for
to
do
">
          <Attributes Foreground="clBlue" Background="clWindow"/>
        </KeyList>
      </SubRules>
    </MainRules>
  </SyntaxColoring>
  <CodeFolding>
    <FoldRegion Name="Figure" Type="0">
      <OpenTag Symbol="{" RegExpr="" UseRegExpr="False"/>
      <CloseTag Symbol="}" RegExpr="" UseRegExpr="False"/>
      <Properties AddEnding="False" NoSubFolds="False" WholeWords="False"/>
      <SubRegions/>
    </FoldRegion>
  </CodeFolding>
</SynUniHighlighter>

Спорные теги помечены красным тегом. Нужно придумать для них более подходящее название и состыковать их со словарём терминов (который нужно составить в http://forum.vingrad.ru/index.php?showtopic=60403).

Очень расчитываю на вашу помощь! smile

Автор: Quadr0 4.8.2005, 00:27
...

Автор: Vitalik 4.8.2005, 10:44
Сказано - сделано smile Темка уже вверху smile

Кстати, обсуждению подлежит не только сомнительные теги, но и остальные тоже.
Также обсуждению подлежит сама структура тегов файла.
Например, есть вариант в секции CodeFolding'а свойства из тега Properties перенести в собственно тег FoldRegion... Но, имхо, текущий вариант лучше.

Нужно сейчас закрепить формат файла как можно сильнее!.. http://forum.sources.ru/smiles/Main/wink.gif

Автор: Sagara 4.8.2005, 11:41
думаю, название тегов не слишком важно... в отличие от интерфейса самого редактора.
Насчет взять названия тегов из словаря - так лучше всего, не надо будет учить новые слова.

Автор: Vitalik 4.8.2005, 14:56
Цитата(Sagara @ 4.8.2005, 11:41)
думаю, название тегов не слишком важно... в отличие от интерфейса самого редактора.

В принципе это как посмотреть... Интерфейс редактора всегда можно безболезненно изменить. А вот изменение формата файла - это действие чрезвычайное. Поэтому раз сейчас всё равно формат файла меняется, хотелось бы его поменять как можно лучше и крепче, чтобы как можно дольше его можно было бы не менять...

Автор: Vitalik 4.8.2005, 17:07
Итак, на основе предложения StayAtHome в теме "http://forum.vingrad.ru/index.php?showtopic=60403" предлагаю утвердить такой формат файла (точнее её часть):
Цитата
        <Range Name="Remark" Style="Remarks">
          <Attributes Foreground="clRed" Background="clWindow" Style="B"/>
          <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
          <OpenToken PartOfTerm="True" StartLine="False" FinishOnEol="False"/>
          <CloseToken PartOfTerm="True" StartLine="False" FinishOnEol="False"/>
          <Properties CloseOnTerm="False" CloseOnEol="True" AllowPredClose="True"/>
          <MultiTokens>
            <Tokens Open="&lt;" Close="&gt;"/>
            <Tokens Open="{" Close="}"/>
          </MultiTokens>
          <SubRules/>
        </Range>
(если есть замечания, пишите)

А вот в секции CodeFolding проблема... В принципе слова Open и Close можно заменить на OpenToken и CloseToken для однообразности файла (но надо ли?).
Цитата
    <FoldRegion Name="Figure" Type="0">
      <OpenToken Symbol="begin" RegExpr="" UseRegExpr="False"/>
      <CloseToken Symbol="end" RegExpr="" UseRegExpr="False"/>
      <Properties AddEnding="False" NoSubFolds="False" WholeWords="False"/>
      <SubRegions/>
    </FoldRegion>

А вот как быть со свойством Symbol? Как его обозвать по-лучше?.. Есть еще варианты: Value, Keyword, Word... Ваши варианты?..
http://forum.vingrad.ru/style_images/1/icon14.gif

Автор: markowww 6.8.2005, 00:29
Цитата(Vitalik @ 4.8.2005, 17:07)
А вот как быть со свойством Symbol? Как его обозвать по-лучше?.. Есть еще варианты: Value, Keyword, Word... Ваши варианты?..

Я думаю, что лучше выбрать Value. Потому что смысл уже содержится в OpenToken и CloseToken. Зачем дублировать содержание чем-то, что это содержание передает не полностью smile

P.S. Какой каламбурчик получился... smile

Автор: Fantasist 6.8.2005, 19:32
Цитата(Vitalik @ 3.8.2005, 16:41)
        <KeyList Name="Keywords" Enabled="True" Style="Keywords" Words="for
to
do
">


Ой-ой, какой кошмар. smile Не знаю как вам, а мне идея перечислять слова как параметр тега очень не нравится.

Автор: Vitalik 6.8.2005, 21:28
Цитата(markowww @ 6.8.2005, 00:29)
Я думаю, что лучше выбрать Value. Потому что смысл уже содержится в OpenToken и CloseToken. Зачем дублировать содержание чем-то, что это содержание передает не полностью

Спасибо! Согласен! smile

Цитата(Fantasist @ 6.8.2005, 19:32)
Ой-ой, какой кошмар.  Не знаю как вам, а мне идея перечислять слова как параметр тега очень не нравится.

О! Нашёл единомышленника! smile
Мне эта идея тоже ужасно не нравится!

Но TXmlDocument по ходу так быстрее работает... smile


Автор: Fantasist 6.8.2005, 22:45
Цитата(Vitalik @ 6.8.2005, 18:28)
Но TXmlDocument по ходу так быстрее работает...


Ох, опять эта скорость загрузки! http://forum.vingrad.ru/index.php?showtopic=59465&view=findpost&p=486188.

Автор: Fantasist 8.8.2005, 18:41
Так, ну давайте с keyword'ами определимся. Хотелось бы, чтобы это все-таки были бы отдельный тег на каждый keyword.

Автор: Vitalik 8.8.2005, 22:37
Цитата(Fantasist @ 8.8.2005, 18:41)
Так, ну давайте с keyword'ами определимся. Хотелось бы, чтобы это все-таки были бы отдельный тег на каждый keyword.

Тэксь... Давайте определимся!..
Я поддерживаю идею об отдельности каждого тега keyword!.. Нужно только определиться как их по-удобнее оформить?..

Да, но это будет востребовано только с новым парсером... Можно конечно и с XmlDocument так попробовать, но большие подсветки будут дольше грузиться...

Но тут еще другой вопрос... Стоит ли тогда выкладывать сейчас beta-версию компонента, если его внутренности всё равно сильно изменятся... Хотя... В принципе пользователь этого же даже не заметит... Хм...
О целесообразности выкладывания беты прошу поговорить http://forum.vingrad.ru/index.php?showtopic=60650

P.S. Извините, если сумбурно написал... Уже спать пора... :-)

Автор: Quadr0 8.8.2005, 23:41
...

Автор: Vitalik 9.8.2005, 10:46
Цитата(Quadr0 @ 8.8.2005, 23:41)
DOM, мне кажется, должен циклы быстро обрабатывать. Так что востребовано это будет, скорее всего, даже сейчас.

Хе-хе smile
Так зачем менять тогда было? smile

Ладно... Проехали smile

Цитата(Quadr0 @ 8.8.2005, 23:41)
Я за.

Значит сделаем.
Вот только вопрос: в каком виде это лучше сделать?..
Вот с ходу несколько вариантов:
Цитата
<W>for</W>
<W>to</W>
<W>do</W>
Цитата
<word value="for"/>
<word value="to"/>
<word value="do"/>
Цитата
<token value="for"/>
<token value="to"/>
<token value="do"/>
Цитата
<word>for<word/>
<word>to<word/>
<word>do<word/>
Цитата
<w v="for"/>
<w v="to"/>
<w v="do"/>
Цитата
<token set="for"/>
<token set="to"/>
<token set="do"/>
Цитата
<token let="for"/>
<token let="to"/>
<token let="do"/>
Цитата
<symb name="#"/>
<symb name="$"/>
<symb name="%"/>
Цитата
<word name="for"/>
<word name="to"/>
<word name="do"/>


Предлагайте любые другие варианты!

Автор: Quadr0 9.8.2005, 12:04
...

Автор: s-mike 9.8.2005, 15:13
А я думаю, что лучше так:
Код

<keywords>
  <token>for</token>
  <token>to</token>
  <token>do</token>
</keyword>

Так меньше ограничений, чем если будет писаться в тегах. Да и парситься должно быстрее.
Цитата(Quadr0 @ 8.8.2005, 23:41)
DOM, мне кажется, должен циклы быстро обрабатывать.

Медленно! Единственное, чем DOM может похвалиться, так это наиболее полной поддержкой стандартов XML (из стандартных средств), а также скоростью случайного доступа, когда XML не будет полностью загружаться в какую-либо структуру данных или обрабатываться циклом.

Автор: Fantasist 10.8.2005, 17:49
Мне больше всего нравиться так:

Код

<word>for</word>
<word>to</word>
<word>do</word>



Автор: Vitalik 10.8.2005, 20:41
s-mike, Fantasist, почему вас тянет на конструкции вида <tag>...</tag> ? smile
Ведь, имхо, <tag value="..."/> немного симпатичнее...
И если вручную редактировать большое количество ключевых слов, то вот эта концовка </tag> всегда мешает... В то время, как во втором варианте концовка только в 3 неалфавитных символа...

Автор: s-mike 11.8.2005, 09:53
Цитата(Vitalik @ 10.8.2005, 20:41)
Ведь, имхо, <tag value="..."/> немного симпатичнее...

Писал уже:
Цитата(s @ 9.8.2005, 15:13)
Так меньше ограничений, чем если будет писаться в тегах. Да и парситься должно быстрее.

Автор: Vitalik 11.8.2005, 18:40
Цитата(s @ 9.8.2005, 15:13)
Так меньше ограничений

Каких ограничений?.. smile

Автор: s-mike 11.8.2005, 22:56
Цитата(Vitalik @ 11.8.2005, 18:40)
Каких ограничений?.. smile

На символы, ну например кавычки. smile

Автор: Vitalik 13.8.2005, 19:59
Цитата(s @ 11.8.2005, 22:56)
На символы, ну например кавычки.

А разве внутри тега <tag>...</tag> символы кавычек не пишутся тоже как &quot;?..

Автор: Fantasist 13.8.2005, 22:25
Цитата(Vitalik @ 10.8.2005, 17:41)
почему вас тянет на конструкции вида <tag>...</tag>


Ну нравится мне так. Мне так кажется более структурированно. smile Чисто личное предпочтение, отстаивать его я не буду. smile

Автор: Quadr0 13.8.2005, 22:26
...

Автор: s-mike 14.8.2005, 01:53
Цитата(Vitalik @ 13.8.2005, 19:59)
А разве внутри тега <tag>...</tag> символы кавычек не пишутся тоже как &quot;?..

Цитата(Quadr0 @ 13.8.2005, 22:26)
Пишутся, так что аргумент s-mike мне пока не ясен smile

Не обязательно. Ограничения на символы внутри тегов - только "<" и ">".

Автор: Vitalik 14.8.2005, 13:05
Цитата(s @ 14.8.2005, 01:53)
Не обязательно. Ограничения на символы внутри тегов - только "<" и ">".

Ну и на символ & как &amp; конечно smile

А в значении атрибута тега всё тоже самое, только добавляется символ кавычки &quot;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)