> -- PGR писал(а):
> Вы храните исходные тексты для ББ в текстовом формате? Если нет, то как можно просмотреть различия между версиями?
Сравнение файлов произвожу внутри самого BlackBox (клавиша F9). Вот мои файлы сценариев, которые я успешно использую совместно с TortoiseSVN для сравнения и слияния измененных файлов.

Файл "diff-odc.js":## Код:
```
var objArgs,num,sBaseDoc,sNewDoc,objScript,shell;

objArgs = WScript.Arguments;
num = objArgs.length;
if (num < 2)
{
   WScript.Echo("Usage: [CScript | WScript] diff-odc.js base.odc new.odc");
   WScript.Quit(1);
}

sBaseDoc = objArgs(0);
sNewDoc = objArgs(1);

objScript = new ActiveXObject("Scripting.FileSystemObject");
if ( ! objScript.FileExists(sBaseDoc))
{
    WScript.Echo("File " + sBaseDoc + " does not exist.  Cannot compare the documents.");
    Wscript.Quit(1);
}
if ( ! objScript.FileExists(sNewDoc))
{
    WScript.Echo("File " + sNewDoc +" does not exist.  Cannot compare the documents.");
    Wscript.Quit(1);
}

objScript = null;

shell = WScript.CreateObject("WScript.Shell");
shell.Run("\""+sBaseDoc+"\"");
WScript.Sleep(1000);
shell.Run("\""+sNewDoc+"\"");
WScript.Sleep(500);
shell.AppActivate("BlackBox");
shell.SendKeys("{F9}");
shell = null;
```


Файл "merge-odc.js":## Код:
```
var objArgs,num,sTheirDoc,sMyDoc,sBaseDoc,objScript,WSHShell,Exec;

objArgs = WScript.Arguments;
num = objArgs.length;
if (num < 3)
{
   WScript.Echo("Usage: [CScript | WScript] merge-odc.js theirs.odc mine.odc base.odc");
   WScript.Quit(1);
}

sTheirDoc=objArgs(0);
sMyDoc=objArgs(1);
sBaseDoc=objArgs(2);

objScript = new ActiveXObject("Scripting.FileSystemObject")
if ( ! objScript.FileExists(sTheirDoc))
{
    WScript.Echo("File " + sTheirDoc +" does not exist.  Cannot compare the documents.");
    Wscript.Quit(1);
}
if ( ! objScript.FileExists(sMyDoc))
{
    WScript.Echo("File " + sMyDoc +" does not exist.  Cannot compare the documents.");
    Wscript.Quit(1);
}
if ( ! objScript.FileExists(sBaseDoc))
{
    WScript.Echo("File " + sBaseDoc +" does not exist.  Cannot compare the documents.");
    Wscript.Quit(1);
}
objScript = null


WSHShell = WScript.CreateObject("WScript.Shell");

Exec = WSHShell.Exec("cmd /c copy \""+sBaseDoc+"\" \""+sBaseDoc+".odc\"");
while (Exec.Status == 0)
  { WScript.Sleep(100); }
WSHShell.Run("\""+sBaseDoc+".odc\"");

WScript.Sleep(1000);
Exec = WSHShell.Exec("cmd /c copy \""+sTheirDoc+"\" \""+sTheirDoc+".odc\"");
while (Exec.Status == 0)
  { WScript.Sleep(100); }
WSHShell.Run("\""+sTheirDoc+".odc\"");

WScript.Sleep(1000);
Exec = WSHShell.Exec("cmd /c copy \""+sMyDoc+"\" \""+sMyDoc+".odc\"");
while (Exec.Status == 0)
  { WScript.Sleep(100); }
WSHShell.Run("\""+sMyDoc+".odc\"");

WScript.Sleep(500);
WSHShell.AppActivate("BlackBox");
WSHShell.SendKeys("{F9}");
WSHShell = null;
```

Настройка TortoiseSVN для использования данных файлов.
Оба файла следует поместить в каталог "TortoiseSVN\Diff-Scripts".
Щелкнуть правой кнопкой по любому каталогу, выбрать в контекстном меню "TortoiseSVN - Settings". Далее перейти на страницу "Diff viewer", нажать кнопку "Advanced". Добавить к списку расширение "*.odc" со следующей командной строкой:## Код:
```
wscript.exe "d:\Program Files\DevTools\TortoiseSVN\Diff-Scripts\diff-odc.js" %base %mine //E:javascript
```
(подставьте ваш путь к TortoiseSVN).

На странице "Merge Tool" нажать кнопку "Advanced", добавить расширение "*.odc" со следующей командной строкой:## Код:
```
wscript.exe "d:\Program Files\DevTools\TortoiseSVN\Diff-Scripts\merge-odc.js" %merged %theirs %mine %base //E:javascript
```
(подставьте ваш путь к TortoiseSVN).

Стандартная функция сравнения текстов находится в модуле DevSearch. Я модифицировал ее так, чтобы она при сравнении не пропускала пробелы, символы перевода строки и параграфа.

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