summaryrefslogtreecommitdiffstats
path: root/kate/kjswrapper/samples/katekjsselect.js
blob: d6a33fbc227aea7123491ad5cd34388f651ef50f (plain)
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
function newWindowCallBack(mainwindow) {
    var ac=mainwindow.actionCollection();
    action = new KAction( ac, 'kjsselect_select_action' );
    action.text = 'Select enclosing block';
    //action.icon = 'konsole';
   

    mainwindow.selectIt = function()
    {
	endChars=Array();
	endChars['\"']="\"";
	endChars['(']=")";
	endChars['[']="]";
	endChars['\'']="'";
	endChars['{']="}";
	endChar="";
	av=this.viewManager().activeView();
	d=KATE.DocumentManager.activeDocument();

		lineCnt=d.numLines();
		x=av.cursorColumn();
		y=av.cursorLine();
		line=d.textLine(y);
		sy=y;
		sx=x-1;
		while (true) {
			if (sx<0) {
				sy=sy-1;
				if (sy<0) {
					d.selectAll();
					return;
				}
				line=d.textLine(sy);
				while (line.length==0) {
					sy=sy-1;
					if (sy<0) {
						d.selectAll();
						return;
					}
					line=d.textLine(sy);
				}
				sx=line.length-1;

			}		
			if (
				(line[sx]=="\"") ||
				(line[sx]=="'") ||
				(line[sx]=="(") ||
				(line[sx]=="[") ||
				(line[sx]=="{") 
			) {
				endChar=endChars[line[sx]];
				break;
			}else sx--;
		}


		alert("Searching end");
		ex=x;
		ey=y;
		line=d.textLine(y);
		while (true) {
			if (ex>=(line.length-1)) {
				ey=ey+1;
				if (ey>=lineCnt) {
					d.selectAll();
					return;
				}
				line=d.textLine(ey);
				while (line.length==0) {
					ey=ey+1;
					if (ey>=lineCnt) {
						d.selectAll();
						return;
					}
					line=d.textLine(ey);
				}
				ex=0;
			}		
			if (line[ex]==endChar)
			break; else ex++;
		}
		d.setSelection(sy,sx,ey,ex);
	
    }

    action.connect( action, 'activated()', mainwindow, 'selectIt' );

}

setWindowConfiguration(null,newWindowCallBack,null);