Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch sosnae-dev Excluding Merge-Ins
This is equivalent to a diff from fcab43444d to 4d83140f80
2013-03-17
| ||
09:39 | SciColorerV8 1.0.1.5 - поправлена работа с длинными строками (убран скролл в конец строки), - контекстное меню на номерах строк, пункт "Свернуть всё" теперь сворачивает не все блоки, а только те, которые указаны в настройках "Группировать - Сворачивать" check-in: c151d44bbd user: metaeditor tags: trunk | |
2013-03-16
| ||
13:45 | Добавлен скрипт, перехватывающий сообщения об ошибках и группирует их Leaf check-in: 4d83140f80 user: sosnae tags: sosnae-dev | |
13:36 | merge trunk check-in: ba484cb4b1 user: sosnae tags: sosnae-dev | |
2013-03-13
| ||
13:31 | SessionManager исправленна ошибка максимизации окон. check-in: fcab43444d user: sosnae tags: trunk | |
2013-03-12
| ||
13:56 | SciColorerV8 check-in: 6330c39d7f user: metaeditor tags: trunk | |
Changes to SciColorerV8/SciColorerV8Manager.js.
1 1 $engine JScript 2 2 $uname SciColorerV8Manager 3 3 $dname SciColorerV8 Manager 4 +$addin stdlib 4 5 5 6 ReadScintillaMessageDefs() 7 +stdlib.require('TextWindow.js', SelfScript); 6 8 7 9 function macros_ПриКликеПоГиперссылке(){ //предопределенная, вызывается при Ctrl+Click на любом идентификаторе в тексте модуля 8 10 addins.byUniqueName("SnegopatMainScript").invokeMacros("ПерейтиКОпределению") 11 + stdlib.setTimeout(function(){ 12 + 13 + var twnd = new TextWindow(); 14 + if (twnd.IsActive()){ 15 + //Message('dddd'); 16 + var pos = twnd.GetSelection(); 17 + var view = windows.getActiveView(); 18 + if (!view){ 19 + } else { 20 + if (view.mdObj && view.mdProp) { 21 + view.mdObj.openModule(view.mdProp.id); 22 + twnd = new TextWindow(); 23 + twnd.SetCaretPos(5, 5); 24 + twnd.SetSelection(pos.beginRow, pos.beginCol, pos.endRow, pos.endCol); 25 + } 26 + 27 + } 28 + } 29 + }, 3000); 30 + 9 31 } 10 32 11 33 function macros_ПриКонтекстномМенюНаНомерахСтрок(){ //предопределенная, вызывается при правом клике на номерах строк 12 34 //addins.byUniqueName("SciColorerV8").invokeMacros("_РазвернутьВсе"); // например 13 35 addins.byUniqueName("SciColorerV8").invokeMacros("_ПоказатьМеню"); 14 36 } 15 37
Added epf/ExtendedSearchРасширенныйОтбор.epf.
cannot compute difference between binary files
Changes to epf/epfloader.js.
48 48 loader.loadEpf(file.Path); 49 49 } 50 50 } 51 51 })(this, this.getEpfRootPath()); 52 52 }, 53 53 54 54 loadEpf: function(path) { 55 + Message(path); 55 56 this.macroses = new Array(); 56 57 var epf = this.v8.LoadEpf(path); 57 58 if (epf) { 58 59 var epfName = epf.Metadata().Name; 59 60 var macroses = this.v8.GetMacroses(epf); 60 61 for (var i=0; i<macroses.Count(); i++) {//макрос 61 62 this.addEpfMacros(epf, epfName, macroses.Get(i));
Changes to epf/ib/1Cv8.1CD.
cannot compute difference between binary files
Added extSyntaxCheck.js.
1 +$engine JScript 2 +$uname extSyntaxCheck 3 +$dname Расширенние сообщений об ошибках . 4 +$addin stdlib 5 +$addin stdcommands 6 + 7 +// (c) Сосна Евгений <shenja@sosna.zp.ua> 8 + 9 +stdlib.require('TextWindow.js', SelfScript); 10 +stdlib.require('ScriptForm.js', SelfScript); 11 +stdlib.require('log4js.js', SelfScript); 12 + 13 +var logger = Log4js.getLogger(SelfScript.uniqueName); 14 +var appender = new Log4js.BrowserConsoleAppender(); 15 +appender.setLayout(new Log4js.PatternLayout(Log4js.PatternLayout.TTCC_CONVERSION_PATTERN)); 16 +logger.addAppender(appender); 17 +logger.setLevel(Log4js.Level.ERROR); 18 + 19 +SelfScript.self['macrosНастройка'] = function() { 20 + extSyntaxCheck = GetExtSyntaxCheck(); 21 + extSyntaxCheck.show(); 22 +} 23 + 24 + 25 +function syntaxAndSpellCheck() { 26 + if(stdcommands.Frntend.SyntaxCheck.getState().enabled) 27 + stdcommands.Frntend.SyntaxCheck.send(); 28 + 29 + var wnd = GetTextWindow(); 30 + 31 + var text = ""; 32 + if (wnd){ 33 + text = wnd.GetText(); 34 + spellChecker = spell.GetSpellChecker(); 35 + spellChecker.SpellModule(text, wnd); 36 + } 37 +} 38 + 39 +ExtSyntaxCheck = ScriptForm.extend({ 40 + 41 + settingsRootPath : SelfScript.uniqueName, 42 + 43 + settings : { 44 + pflSnegopat : { 45 + 'cathSyntaxCheck': false // Перехватывать комманду синтаксической проверки. 46 + } 47 + }, 48 + 49 + construct : function () { 50 + 51 + this._super(SelfScript.fullPath.replace(/.js$/, '.ssf')); //Загрузим форму с настройками, форма должна называться так же как и скрипт, только с расширением ssf 52 + this.RE = new RegExp("^(\\{.{1,}\\}\:.{1,}\)$", "mig"); 53 + this.re_column = new RegExp("\\(\(\\d{1,})\,(\\d{1,})\\)\\}\:", "i"); 54 + this.RE_ERROR_TEXT = new RegExp("\\s\\((Проверка\\:\\s.{1,})\\)$", "gim"); 55 + this.errors = {}; 56 + this.loadSettings(); //Загрузим сохраненные настройки. 57 + 58 + ExtSyntaxCheck._instance = this; 59 + }, 60 + 61 + loadSettings: function(){ 62 + this._super(); 63 + 64 + if (this.form.cathSyntaxCheck) { 65 + //Подключаемся к команде проверки текста 66 + logger.debug('loadSettings addHandler') 67 + stdcommands.Frntend.SyntaxCheck.addHandler(this, "onSyntaxCheck"); 68 + 69 + } else { 70 + logger.debug('loadSettings delHandler') 71 + try { 72 + stdcommands.Frntend.SyntaxCheck.delHandler(this, "onSyntaxCheck"); 73 + } catch(e) { 74 + logger.debug(e.description); 75 + } 76 + 77 + } 78 + 79 + }, 80 + 81 + onSyntaxCheck : function (cmd){ 82 + logger.debug('onSyntaxCheck ') 83 + if (cmd.isBefore){ 84 + this.wnd = new TextWindow(); 85 + } 86 + if(!cmd.isBefore) 87 + { 88 + logger.debug('onSyntaxCheck disconnect') 89 + try { 90 + events.disconnect(Designer, "onMessage", this); 91 + 92 + } catch (e) { } 93 + 94 + hasErrors = false; 95 + 96 + for (var k in this.errors){ 97 + hasErrors = true; 98 + text = this.errors[k]; 99 + var Matches = this.re_column.exec(text); 100 + if (Matches != null){ 101 + 102 + 103 + var param = {} 104 + param['wnd'] = this.wnd; 105 + param['line'] = Matches[1]; 106 + param['column'] = Matches[2]; 107 + logger.debug('onSyntaxCheck вывод сообщения по регулярному выражению.'); 108 + Message(text, mExc3, (function(param){ 109 + logger.debug('on Message Обработчик событий.'); 110 + if (!param['wnd']) { 111 + return 112 + } 113 + if (!param['wnd'].IsActive()) { 114 + return 115 + } 116 + param['wnd'].SetCaretPos(param['line'], param['column']); 117 + view = param['wnd'].GetView(); 118 + if (!view){ 119 + 120 + } else { 121 + logger.debug('view activate '); 122 + view.activate(); 123 + } 124 + 125 + param = null 126 + 127 + 128 + }), param); 129 + } else { 130 + logger.debug('onSyntaxCheck вывод сообщения - не смогли определить.'); 131 + Message(''+text); 132 + } 133 + } 134 + this.errors = {}; 135 + } else { 136 + logger.debug('onSyntaxCheck connect') 137 + events.connect(Designer, "onMessage", this); 138 + } 139 + logger.debug('onSyntaxCheck end') 140 + }, 141 + 142 + onMessage:function(param){ 143 + text = param.text; 144 + if (!text.length) 145 + return 146 + 147 + this.RE = new RegExp("^(\\{.{1,}\\}\:.{1,}\)$", "mig"); 148 + if ((Matches = this.RE.exec(text)) != null){ 149 + param.cancel = true; 150 + str = Matches[1]; 151 + if (!this.errors[str]){ 152 + this.errors[str] = text; 153 + } else { 154 + this.RE_ERROR_TEXT = new RegExp("\\s\\((Проверка\\:\\s.{1,})\\)$", "gim"); 155 + param.cancel = true; 156 + if ((Matches_error = this.RE_ERROR_TEXT.exec(text)) != null){ 157 + str_error = Matches_error[0]; 158 + this.errors[str] = this.errors[str]+' '+str_error; 159 + } 160 + } 161 + } 162 + }, 163 + 164 + Ok_Click:function(Button){ 165 + this.saveSettings(); 166 + this.loadSettings(); 167 + this.form.Close(); 168 + }, 169 + 170 + Close_Click:function(Button){ 171 + this.form.Close(); 172 + } 173 + 174 +}) 175 + 176 + 177 +function GetExtSyntaxCheck() { 178 + if (!ExtSyntaxCheck._instance) 179 + new ExtSyntaxCheck(); 180 + 181 + return ExtSyntaxCheck._instance; 182 +} 183 + 184 +GetExtSyntaxCheck();
Added extSyntaxCheck.ssf.
cannot compute difference between binary files
Changes to wndpanel.js.
16 16 17 17 global.connectGlobals(SelfScript) 18 18 19 19 20 20 var form 21 21 var needActivate, needHide 22 22 var api = stdlib.require('winapi.js') 23 +var diff; 23 24 24 25 function getFullMDName(mdObj, mdProp) 25 26 { 26 27 var names = [] 27 28 while(true) 28 29 { 29 30 names.unshift(mdObj.name) ................................................................................ 550 551 551 552 function CmdsConfig(Кнопка) 552 553 { 553 554 var pathToForm=SelfScript.fullPath.replace(/.js$/, 'param.ssf') 554 555 мФормаНастройки=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту 555 556 мФормаНастройки.ОткрытьМодально() 556 557 } 558 + 559 +function КонтекстноеМенюДобавитьКСравнениюА(Кнопка) { 560 + if(form.Controls.WndList.ТекущаяСтрока) { 561 + var obj = getWindowObject(form.Controls.WndList.ТекущаяСтрока.Окно.view); 562 + if (!obj) 563 + return 564 + diff.addA(obj); 565 + 566 + } 567 +} 568 + 569 +function КонтекстноеМенюДобавитьКСравнениюВ(Кнопка) { 570 + if(form.Controls.WndList.ТекущаяСтрока) { 571 + var obj = getWindowObject(form.Controls.WndList.ТекущаяСтрока.Окно.view); 572 + if (!obj) 573 + return 574 + diff.addB(obj); 575 + 576 + } 577 +} 578 + 579 +function КонтекстноеМенюДобавитьКСравнениюС(Кнопка) { 580 + if(form.Controls.WndList.ТекущаяСтрока) { 581 + var obj = getWindowObject(form.Controls.WndList.ТекущаяСтрока.Окно.view); 582 + if (!obj) 583 + return 584 + diff.addC(obj); 585 + 586 + } 587 +} 588 + 589 +function КоманднаяПанельСравненияДействиеОчиститьБуфер(Кнопка) { 590 + diff.clearCache(); 591 +} 592 + 593 +function getWindowObject (view) { 594 + 595 + if (view.mdObj && view.mdProp) 596 + return new MdObject(view.mdObj, view.mdProp, view.title); 597 + 598 + var obj = view.getObject(); 599 + if (obj && toV8Value(obj).typeName(0) == 'TextDocument') 600 + return new TextDocObject(obj, view.title); 601 + 602 + if (obj) Message('Неподдерживаемый тип объекта для сравнения: ' + toV8Value(obj).typeName(0)); 603 + 604 + return null; 605 +} 606 + 557 607 558 608 function мЗаписатьНастройки() { 559 609 мДляВнешнихФайловОтображатьТолькоИмяФайла=мФормаНастройки.ДляВнешнихФайловОтображатьТолькоИмяФайла 560 610 мИспользоватьСессии = мФормаНастройки.ИспользоватьСессии; 561 611 activateSearchElement = мФормаНастройки.ПриОткрытииФормыАктивизироватьСтрокуПоиска; 562 612 profileRoot.setValue(pflOnlyNameForExtFiles, мДляВнешнихФайловОтображатьТолькоИмяФайла) 563 613 profileRoot.setValue(pflUseSessions, мИспользоватьСессии); ................................................................................ 592 642 } 593 643 594 644 function WndListПередУдалением(Элемент, Отказ) 595 645 { 596 646 Отказ.val = true 597 647 closeSelected() 598 648 } 649 + 650 +//////////////////////////////////////////////////////////////////////////////////////// 651 +////{ Вспомогательные объекты. 652 +//// 653 + 654 +MdObject = stdlib.Class.extend({ 655 + construct: function (obj, prop, title) { 656 + this.obj = obj; 657 + this.prop = prop; 658 + this.title = null; 659 + this.md = obj.container; 660 + this.isForm = (prop.name(1) == "Форма"); 661 + }, 662 + getText: function() { 663 + return this.obj.getModuleText(this.prop.id); 664 + }, 665 + 666 + saveTextToTempFile: function(path){ 667 + if (!path) path = GetTempFileName('txt'); 668 + 669 + text = this.getText(); 670 + var file = v8New("textDocument"); 671 + file.setText(text); 672 + try{ 673 + file.Write(path); 674 + } catch (e) { 675 + return null; 676 + } 677 + 678 + return path; 679 + 680 + }, 681 + 682 + activate: function() { 683 + this.obj.openModule(this.prop.id); 684 + return GetTextWindow(); 685 + }, 686 + getTitle: function() { 687 + if (!this.title) 688 + { 689 + function getMdName(mdObj) { 690 + if (mdObj.parent && mdObj.parent.mdClass.name(1) != 'Конфигурация') 691 + return getMdName(mdObj.parent) + '.' + mdObj.mdClass.name(1) + '.' + mdObj.name; 692 + var cname = mdObj.mdClass.name(1); 693 + return (cname ? cname +'.':'') + mdObj.name; 694 + } 695 + this.title = getMdName(this.obj) + '.' + this.prop.name(1); 696 + } 697 + return this.title; 698 + }, 699 + 700 + getForm: function(){ 701 + if (!this.isForm) { 702 + return null 703 + } 704 + 705 + var tempPath = GetTempFileName('ssf'); 706 + 707 + var ep = this.obj.getExtProp("Форма"); 708 + var file = ep.saveToFile(); 709 + try{ 710 + // создадим хранилище на базе файла. Для управляемых форм тут вывалится в catch 711 + var stg = v8Files.attachStorage(file); 712 + // Получим из хранилища содержимое под-файла form 713 + var form = ep.getForm(); 714 + var file1 = v8New("textDocument"); 715 + file1.setText(' '); 716 + file1.Write(tempPath); 717 + file1=null; 718 + 719 + var file = ep.saveToFile(v8files.open("file://"+tempPath, fomIn | fomOut | fomTruncate)); 720 + file.close(); 721 + isManagmendForm = false 722 + } catch(e) { 723 + //logger.error(e.description); 724 + //isManagmendForm = true; 725 + file.seek(0, fsBegin) 726 + var text = file.getString(dsUtf8); 727 + var file = v8New("textDocument"); 728 + 729 + file.setText(text); 730 + var tempPath = GetTempFileName('txt'); 731 + file.Write(tempPath); 732 + newPath = GetTempFileName('ssf'); 733 + MoveFile(tempPath, newPath); 734 + tempPath = newPath; 735 + } 736 + 737 + return tempPath; 738 + } 739 +}); 740 + 741 +TextDocObject = stdlib.Class.extend({ 742 + construct: function (txtDoc, title) { 743 + this.obj = txtDoc; 744 + this.title = title; 745 + }, 746 + getText: function() { 747 + return this.obj.GetText(); 748 + }, 749 + activate: function() { 750 + this.obj.Show(); 751 + return GetTextWindow(); 752 + }, 753 + getTitle: function() { 754 + if (!this.title) 755 + this.title = this.obj.UsedFileName; 756 + return this.title; 757 + } 758 +}); 759 + 760 +diffObject = stdlib.Class.extend({ 761 + construct: function (bla) { 762 + this.kdiffpath = "d:\\WORK\\snegopat\\local\\KDiff3\\kdiff3.exe"; 763 + this.A = null; 764 + this.B = null; 765 + this.C = null; 766 + }, 767 + 768 + addA : function(obj){ 769 + this.A = obj; 770 + }, 771 + 772 + addB : function(obj){ 773 + this.B = obj; 774 + this.diffObjects(); 775 + }, 776 + 777 + addC : function(obj){ 778 + this.C = obj; 779 + }, 780 + 781 + diffObjects: function(){ 782 + //debugger; 783 + if (!this.A || !this.B) { 784 + Message("Не заполенны А или В"); 785 + return; 786 + } 787 + 788 + 789 + if (this.A.isForm = this.B.isForm) { 790 + //diff form... 791 + 792 + //diff files... 793 + pathA = this.A.getForm(); 794 + if (!pathA) return; 795 + 796 + pathB = this.B.getForm(); 797 + if (!pathB) return 798 + 799 + v8reader = stdlib.require(stdlib.getSnegopatMainFolder() + "scripts\\dvcs\\diff-v8Reader.js").GetBackend(); 800 + v8reader(pathA, pathB); 801 + 802 + } else { 803 + //diff files... 804 + pathA = this.A.saveTextToTempFile(); 805 + if (!pathA) return; 806 + 807 + pathB = this.B.saveTextToTempFile(); 808 + if (!pathB) return 809 + 810 + if (this.C) { 811 + pathC = +this.C.saveTextToTempFile(); 812 + if (!pathC) return 813 + 814 + pathC = ' '+pathC; 815 + } else { 816 + pathC = '' 817 + } 818 + 819 + 820 + var cmd = this.kdiffpath +' "'+pathA+'" "'+ pathB +'" '+ pathC + ' -o '+ '"d:\\work\\temp\\'+this.A.getTitle()+'.txt"'; 821 + Message(""+cmd); 822 + ЗапуститьПриложение(cmd, "", true); 823 + 824 + } 825 + 826 + 827 + }, 828 + 829 + clearCache: function () { 830 + this.A = null; 831 + this.B = null; 832 + this.C = null; 833 + } 834 + 835 +}); 599 836 600 837 (function(){ 601 838 // Инициализация скрипта 602 839 WndList.One = new WndList 603 840 form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), SelfScript.self) 604 841 form.КлючСохраненияПоложенияОкна = "wndpanel" 605 842 form.WndList.Columns.Окно.ТипЗначения = v8New("ОписаниеТипов") ................................................................................ 635 872 636 873 sessionManager = null; 637 874 if (мИспользоватьСессии){ 638 875 loadSessionManager(); 639 876 } 640 877 641 878 мФормаНастройки=null 879 +diff = new diffObject();
Changes to wndpanel.ssf.
cannot compute difference between binary files