Changes On Branch sosnae-dev Вы: nobody
Вход

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
2
3

4
5

6
7
8




















9
10
11
12
13
14
15
$engine JScript
$uname SciColorerV8Manager
$dname SciColorerV8 Manager


ReadScintillaMessageDefs()


function macros_ПриКликеПоГиперссылке(){ //предопределенная, вызывается при Ctrl+Click на любом идентификаторе в тексте модуля
    addins.byUniqueName("SnegopatMainScript").invokeMacros("ПерейтиКОпределению")




















}

function macros_ПриКонтекстномМенюНаНомерахСтрок(){ //предопределенная, вызывается при правом клике на номерах строк
    //addins.byUniqueName("SciColorerV8").invokeMacros("_РазвернутьВсе"); // например
    addins.byUniqueName("SciColorerV8").invokeMacros("_ПоказатьМеню");
}




>


>



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$engine JScript
$uname SciColorerV8Manager
$dname SciColorerV8 Manager
$addin stdlib

ReadScintillaMessageDefs()
stdlib.require('TextWindow.js', SelfScript);

function macros_ПриКликеПоГиперссылке(){ //предопределенная, вызывается при Ctrl+Click на любом идентификаторе в тексте модуля
    addins.byUniqueName("SnegopatMainScript").invokeMacros("ПерейтиКОпределению")
    stdlib.setTimeout(function(){

        var twnd = new TextWindow();
        if (twnd.IsActive()){
            //Message('dddd');
            var pos = twnd.GetSelection();
            var view = windows.getActiveView();
            if (!view){
            } else {
                    if (view.mdObj && view.mdProp) {
                        view.mdObj.openModule(view.mdProp.id);
                        twnd = new TextWindow();
                        twnd.SetCaretPos(5, 5);
                        twnd.SetSelection(pos.beginRow, pos.beginCol, pos.endRow, pos.endCol);
                    }

            }
        }
    }, 3000);
    
}

function macros_ПриКонтекстномМенюНаНомерахСтрок(){ //предопределенная, вызывается при правом клике на номерах строк
    //addins.byUniqueName("SciColorerV8").invokeMacros("_РазвернутьВсе"); // например
    addins.byUniqueName("SciColorerV8").invokeMacros("_ПоказатьМеню");
}

Added epf/ExtendedSearchРасширенныйОтбор.epf.

cannot compute difference between binary files

Changes to epf/epfloader.js.

48
49
50
51
52
53
54

55
56
57
58
59
60
61
					loader.loadEpf(file.Path);
				}
			}
		})(this, this.getEpfRootPath());
	},
	
	loadEpf: function(path) {

		this.macroses = new Array();
		var epf = this.v8.LoadEpf(path);
		if (epf) {
			var epfName = epf.Metadata().Name;
			var macroses = this.v8.GetMacroses(epf);
			for (var i=0; i<macroses.Count(); i++) {//макрос
				this.addEpfMacros(epf, epfName, macroses.Get(i));







>







48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
					loader.loadEpf(file.Path);
				}
			}
		})(this, this.getEpfRootPath());
	},
	
	loadEpf: function(path) {
		Message(path);
		this.macroses = new Array();
		var epf = this.v8.LoadEpf(path);
		if (epf) {
			var epfName = epf.Metadata().Name;
			var macroses = this.v8.GetMacroses(epf);
			for (var i=0; i<macroses.Count(); i++) {//макрос
				this.addEpfMacros(epf, epfName, macroses.Get(i));

Changes to epf/ib/1Cv8.1CD.

cannot compute difference between binary files

Added extSyntaxCheck.js.

















































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
$engine JScript
$uname extSyntaxCheck
$dname Расширенние сообщений об ошибках .
$addin stdlib
$addin stdcommands

// (c) Сосна Евгений <shenja@sosna.zp.ua>

stdlib.require('TextWindow.js', SelfScript);
stdlib.require('ScriptForm.js', SelfScript);
stdlib.require('log4js.js', SelfScript);

var logger = Log4js.getLogger(SelfScript.uniqueName);
var appender = new Log4js.BrowserConsoleAppender();
appender.setLayout(new Log4js.PatternLayout(Log4js.PatternLayout.TTCC_CONVERSION_PATTERN));
logger.addAppender(appender);
logger.setLevel(Log4js.Level.ERROR);

SelfScript.self['macrosНастройка'] = function() {
    extSyntaxCheck = GetExtSyntaxCheck();
    extSyntaxCheck.show();
}


function syntaxAndSpellCheck() {
    if(stdcommands.Frntend.SyntaxCheck.getState().enabled)
        stdcommands.Frntend.SyntaxCheck.send();
    
    var wnd = GetTextWindow();
    
    var text = "";
    if (wnd){
        text = wnd.GetText();
        spellChecker = spell.GetSpellChecker();
        spellChecker.SpellModule(text, wnd);
    }
}

ExtSyntaxCheck = ScriptForm.extend({

    settingsRootPath : SelfScript.uniqueName,
    
    settings : {
        pflSnegopat : {
            'cathSyntaxCheck': false // Перехватывать комманду синтаксической проверки.
        }
    },

    construct : function () {
        
        this._super(SelfScript.fullPath.replace(/.js$/, '.ssf')); //Загрузим форму с настройками, форма должна называться так же как и скрипт, только с расширением ssf
        this.RE = new RegExp("^(\\{.{1,}\\}\:.{1,}\)$", "mig"); 
        this.re_column = new RegExp("\\(\(\\d{1,})\,(\\d{1,})\\)\\}\:", "i");
        this.RE_ERROR_TEXT = new RegExp("\\s\\((Проверка\\:\\s.{1,})\\)$", "gim");
        this.errors = {};
        this.loadSettings(); //Загрузим сохраненные настройки. 
        
        ExtSyntaxCheck._instance = this;
    }, 
    
    loadSettings: function(){
        this._super();
        
        if (this.form.cathSyntaxCheck) { 
            //Подключаемся к команде проверки текста 
            logger.debug('loadSettings addHandler')
             stdcommands.Frntend.SyntaxCheck.addHandler(this, "onSyntaxCheck");
            
        } else {
            logger.debug('loadSettings delHandler')
            try {
                stdcommands.Frntend.SyntaxCheck.delHandler(this, "onSyntaxCheck");
            } catch(e) {
                logger.debug(e.description);
            }
            
        }
        
    },
    
    onSyntaxCheck : function (cmd){
        logger.debug('onSyntaxCheck ')
        if (cmd.isBefore){
            this.wnd = new TextWindow();
        }
        if(!cmd.isBefore)
        { 
            logger.debug('onSyntaxCheck disconnect')
            try {
                    events.disconnect(Designer, "onMessage", this);

                 } catch (e) { }
                 
            hasErrors = false;
            
            for (var k in this.errors){
                hasErrors = true;
                text = this.errors[k];
                var Matches = this.re_column.exec(text);
                if (Matches != null){
                    
                    
                    var param = {}
                    param['wnd'] = this.wnd;
                    param['line'] = Matches[1];
                    param['column'] = Matches[2];
                    logger.debug('onSyntaxCheck вывод сообщения по регулярному выражению.');
                    Message(text, mExc3, (function(param){
                        logger.debug('on Message Обработчик событий.');
                        if (!param['wnd']) {
                            return 
                        }
                        if (!param['wnd'].IsActive()) {
                            return 
                        }
                        param['wnd'].SetCaretPos(param['line'], param['column']);
                        view = param['wnd'].GetView();
                        if (!view){
                            
                        } else {
                            logger.debug('view activate ');
                            view.activate();
                        }
                        
                        param = null
                        
                        
    }), param);
                } else {
                    logger.debug('onSyntaxCheck вывод сообщения - не смогли определить.');
                    Message(''+text);
                }
            }
            this.errors = {};
        } else {
            logger.debug('onSyntaxCheck connect')
            events.connect(Designer, "onMessage", this);
        }
        logger.debug('onSyntaxCheck end')
    },
    
    onMessage:function(param){
        text = param.text;
        if (!text.length)
            return
        
        this.RE = new RegExp("^(\\{.{1,}\\}\:.{1,}\)$", "mig"); 
        if ((Matches = this.RE.exec(text)) != null){
            param.cancel = true;
            str = Matches[1];
            if (!this.errors[str]){
                this.errors[str] = text;
            } else {
                this.RE_ERROR_TEXT = new RegExp("\\s\\((Проверка\\:\\s.{1,})\\)$", "gim");
                param.cancel = true;
                if ((Matches_error = this.RE_ERROR_TEXT.exec(text)) != null){
                    str_error = Matches_error[0];
                    this.errors[str] = this.errors[str]+' '+str_error;
                }
            }
        }
    },
    
    Ok_Click:function(Button){
        this.saveSettings();
        this.loadSettings();
        this.form.Close();
    }, 

    Close_Click:function(Button){
        this.form.Close();
    }

})


function GetExtSyntaxCheck() {
    if (!ExtSyntaxCheck._instance)
        new ExtSyntaxCheck();
    
    return ExtSyntaxCheck._instance;
}

GetExtSyntaxCheck();

Added extSyntaxCheck.ssf.

cannot compute difference between binary files

Changes to wndpanel.js.

16
17
18
19
20
21
22

23
24
25
26
27
28
29
...
550
551
552
553
554
555
556

















































557
558
559
560
561
562
563
...
592
593
594
595
596
597
598



























































































































































































599
600
601
602
603
604
605
...
635
636
637
638
639
640
641


global.connectGlobals(SelfScript)


var form
var needActivate, needHide
var api = stdlib.require('winapi.js')


function getFullMDName(mdObj, mdProp)
{
    var names = []
    while(true)
    {
        names.unshift(mdObj.name)
................................................................................

function CmdsConfig(Кнопка)
{
	var pathToForm=SelfScript.fullPath.replace(/.js$/, 'param.ssf')
    мФормаНастройки=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
    мФормаНастройки.ОткрытьМодально()
}


















































function мЗаписатьНастройки() {
    мДляВнешнихФайловОтображатьТолькоИмяФайла=мФормаНастройки.ДляВнешнихФайловОтображатьТолькоИмяФайла
    мИспользоватьСессии = мФормаНастройки.ИспользоватьСессии;
    activateSearchElement = мФормаНастройки.ПриОткрытииФормыАктивизироватьСтрокуПоиска;
    profileRoot.setValue(pflOnlyNameForExtFiles, мДляВнешнихФайловОтображатьТолькоИмяФайла)
    profileRoot.setValue(pflUseSessions, мИспользоватьСессии);
................................................................................
}

function WndListПередУдалением(Элемент, Отказ)
{
    Отказ.val = true
    closeSelected()
}




























































































































































































(function(){
    // Инициализация скрипта
    WndList.One = new WndList
    form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), SelfScript.self)
    form.КлючСохраненияПоложенияОкна = "wndpanel"
    form.WndList.Columns.Окно.ТипЗначения = v8New("ОписаниеТипов")
................................................................................

sessionManager = null;
if (мИспользоватьСессии){
    loadSessionManager();
}

мФормаНастройки=null








>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







>
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
...
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
...
872
873
874
875
876
877
878
879

global.connectGlobals(SelfScript)


var form
var needActivate, needHide
var api = stdlib.require('winapi.js')
var diff;

function getFullMDName(mdObj, mdProp)
{
    var names = []
    while(true)
    {
        names.unshift(mdObj.name)
................................................................................

function CmdsConfig(Кнопка)
{
	var pathToForm=SelfScript.fullPath.replace(/.js$/, 'param.ssf')
    мФормаНастройки=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
    мФормаНастройки.ОткрытьМодально()
}

function КонтекстноеМенюДобавитьКСравнениюА(Кнопка) {
    if(form.Controls.WndList.ТекущаяСтрока) {
        var obj = getWindowObject(form.Controls.WndList.ТекущаяСтрока.Окно.view);
        if (!obj)
            return
        diff.addA(obj);
        
    }
}

function КонтекстноеМенюДобавитьКСравнениюВ(Кнопка) {
 if(form.Controls.WndList.ТекущаяСтрока) {
        var obj = getWindowObject(form.Controls.WndList.ТекущаяСтрока.Окно.view);
        if (!obj)
            return
        diff.addB(obj);
        
    }
}

function КонтекстноеМенюДобавитьКСравнениюС(Кнопка) {
    if(form.Controls.WndList.ТекущаяСтрока) {
        var obj = getWindowObject(form.Controls.WndList.ТекущаяСтрока.Окно.view);
        if (!obj)
            return
        diff.addC(obj);
        
    }
}

function КоманднаяПанельСравненияДействиеОчиститьБуфер(Кнопка) {
    diff.clearCache();
}

function getWindowObject  (view) {
   
        if (view.mdObj && view.mdProp) 
            return new MdObject(view.mdObj, view.mdProp, view.title);
            
        var obj = view.getObject();
        if (obj && toV8Value(obj).typeName(0) == 'TextDocument')
            return new TextDocObject(obj, view.title);        
            
        if (obj) Message('Неподдерживаемый тип объекта для сравнения: ' + toV8Value(obj).typeName(0));
        
        return null;
}


function мЗаписатьНастройки() {
    мДляВнешнихФайловОтображатьТолькоИмяФайла=мФормаНастройки.ДляВнешнихФайловОтображатьТолькоИмяФайла
    мИспользоватьСессии = мФормаНастройки.ИспользоватьСессии;
    activateSearchElement = мФормаНастройки.ПриОткрытииФормыАктивизироватьСтрокуПоиска;
    profileRoot.setValue(pflOnlyNameForExtFiles, мДляВнешнихФайловОтображатьТолькоИмяФайла)
    profileRoot.setValue(pflUseSessions, мИспользоватьСессии);
................................................................................
}

function WndListПередУдалением(Элемент, Отказ)
{
    Отказ.val = true
    closeSelected()
}

////////////////////////////////////////////////////////////////////////////////////////
////{ Вспомогательные объекты.
////

MdObject = stdlib.Class.extend({           
    construct: function (obj, prop, title) {
        this.obj = obj;
        this.prop = prop;
        this.title = null;
        this.md = obj.container;
        this.isForm = (prop.name(1) == "Форма");
    },
    getText: function() {
        return this.obj.getModuleText(this.prop.id);
    },

    saveTextToTempFile: function(path){
        if (!path) path = GetTempFileName('txt');

        text = this.getText();
        var file = v8New("textDocument");
        file.setText(text);
        try{
            file.Write(path);    
        } catch (e) {
            return null;
        }
        
        return path;

    },

    activate: function() {
        this.obj.openModule(this.prop.id);
        return GetTextWindow();
    },
    getTitle: function() {
        if (!this.title)
        {
            function getMdName(mdObj) {                             
                if (mdObj.parent && mdObj.parent.mdClass.name(1) != 'Конфигурация')
                    return getMdName(mdObj.parent) + '.' + mdObj.mdClass.name(1) + '.' + mdObj.name;
                var cname = mdObj.mdClass.name(1);
                return  (cname ? cname +'.':'') + mdObj.name;
            }
            this.title = getMdName(this.obj) + '.' + this.prop.name(1);
        }
        return this.title;
    },

    getForm: function(){
        if (!this.isForm) {
            return null
        }

        var tempPath = GetTempFileName('ssf');

        var ep = this.obj.getExtProp("Форма");
        var file = ep.saveToFile();
        try{
            // создадим хранилище на базе файла. Для управляемых форм тут вывалится в catch
            var stg = v8Files.attachStorage(file);
            // Получим из хранилища содержимое под-файла form
            var form = ep.getForm();
            var file1 = v8New("textDocument");
            file1.setText(' ');
            file1.Write(tempPath);
            file1=null;

            var file = ep.saveToFile(v8files.open("file://"+tempPath,  fomIn | fomOut | fomTruncate));
            file.close();
            isManagmendForm = false
        } catch(e) {
            //logger.error(e.description);
            //isManagmendForm = true;
            file.seek(0, fsBegin)
            var text = file.getString(dsUtf8);
            var file = v8New("textDocument");

            file.setText(text);
            var tempPath = GetTempFileName('txt');
            file.Write(tempPath);
            newPath = GetTempFileName('ssf');
            MoveFile(tempPath, newPath);
            tempPath = newPath;
        }

        return tempPath;
    }
});

TextDocObject = stdlib.Class.extend({
    construct: function (txtDoc, title) {
        this.obj = txtDoc;
        this.title = title;
    },
    getText: function() {
        return this.obj.GetText();
    },
    activate: function() {
        this.obj.Show();
        return GetTextWindow();
    },
    getTitle: function() {
        if (!this.title)
            this.title = this.obj.UsedFileName;
        return this.title;
    }
});

diffObject = stdlib.Class.extend({
    construct: function (bla) {
        this.kdiffpath = "d:\\WORK\\snegopat\\local\\KDiff3\\kdiff3.exe";
        this.A = null;
        this.B = null;
        this.C = null;
    },

    addA : function(obj){
        this.A = obj;
    }, 

    addB : function(obj){
        this.B = obj;
        this.diffObjects();
    }, 

    addC : function(obj){
        this.C = obj;
    }, 

    diffObjects: function(){
        //debugger;
        if (!this.A || !this.B) {
            Message("Не заполенны А или В");
            return;
        }


        if (this.A.isForm = this.B.isForm) {
            //diff form...

            //diff files...
            pathA = this.A.getForm();
            if (!pathA) return;

            pathB = this.B.getForm();
            if (!pathB) return

            v8reader = stdlib.require(stdlib.getSnegopatMainFolder() + "scripts\\dvcs\\diff-v8Reader.js").GetBackend();
            v8reader(pathA, pathB);

        } else {
            //diff files...
            pathA = this.A.saveTextToTempFile();
            if (!pathA) return;

            pathB = this.B.saveTextToTempFile();
            if (!pathB) return

            if (this.C) {
                pathC = +this.C.saveTextToTempFile();
                if (!pathC) return    

                pathC = ' '+pathC;
            } else {
                pathC = ''
            }
            

            var cmd = this.kdiffpath +' "'+pathA+'" "'+ pathB +'" '+ pathC + ' -o '+ '"d:\\work\\temp\\'+this.A.getTitle()+'.txt"';
            Message(""+cmd);
            ЗапуститьПриложение(cmd, "", true);

        }


    },

    clearCache: function () {
        this.A = null;
        this.B = null;
        this.C = null;
    }

});

(function(){
    // Инициализация скрипта
    WndList.One = new WndList
    form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), SelfScript.self)
    form.КлючСохраненияПоложенияОкна = "wndpanel"
    form.WndList.Columns.Окно.ТипЗначения = v8New("ОписаниеТипов")
................................................................................

sessionManager = null;
if (мИспользоватьСессии){
    loadSessionManager();
}

мФормаНастройки=null
diff = new diffObject();

Changes to wndpanel.ssf.

cannot compute difference between binary files