quest » 04 окт 2013, 22:21
Разорбрался.
Но вопрос такой - курсор не мигает. все остально работает, а вот курсор не видно. вот и приходиться мышкой тыкать в окно.
И попутно вопрос - есть шаблон вообще для таких мелентких скриптов? типа того что бы только нужную часть писать а вся обвязка была бы более-менее стандартной?
И еще вопрос - код закритикуйте - где неправильно сделал? как придать коду совершенства?
код
$engine JScript
$uname warn_45lines
$dname warn_45lines
$addin global
$addin stdlib
$addin stdcommands
stdlib.require('TextWindow.js', SelfScript);
stdlib.require('SyntaxAnalysis.js', SelfScript);
global.connectGlobals(SelfScript);
function onSyntaxCheck(cmd)
{
var mdObj, av = windows.getActiveView()
if(!av || !(mdObj = av.mdObj))
return
macrosanalizeModule();
}
function macrosanalizeModule(){
var tw = GetTextWindow();
if (!tw) return;
var parser = snegopat.parseSources(tw.text());
for(var i = 0, c = parser.lexemCount; i < c; i++)
{
var lex = parser.lexem(i)
if(lex.type==40 )
i+= analizeFunction(parser,i,lex);
}
}
function onClick_45Lines(param)
{
if (!param['wnd'])
return
if (!param['wnd'].IsActive())
return
param['wnd'].setCaretPos(param['line']+1,1);
var view = param['wnd'].GetView();
if (!view){}
else
view.activate();
}
function analizeFunction(parser,start,startlex){
line = 0;
name = parser.lexem(start+1).text;
lastline = startlex.line;
var i,c, wnd = GetTextWindow();
for(i = start, c = parser.lexemCount; i< c; i++){
var lex = parser.lexem(i);
var maxLines = 45;
if(lex.type==42){
if(line > maxLines) {
var param = {};
param['wnd'] = wnd;
param['line'] = startlex.line;
message("Функция "+name+" большая. Лишних "+(line - maxLines)+" строк ",mExc1, onClick_45Lines, param);
}
break;
}
if (lex.type == 1) // коменты не считаются кодом.
continue;
line+= (lastline==lex.line) ? 0:1; // смениться после прочтения перевода строки. а это может только при честном переводе или если прочли многострочную строку
lastline =lex.line;
}
return (i - start);
}
// Добавим обработчик команды сохранения файла
stdcommands.Frntend.SyntaxCheck.addHandler(SelfScript.self, "onSyntaxCheck");
Разорбрался.
Но вопрос такой - курсор не мигает. все остально работает, а вот курсор не видно. вот и приходиться мышкой тыкать в окно.
И попутно вопрос - есть шаблон вообще для таких мелентких скриптов? типа того что бы только нужную часть писать а вся обвязка была бы более-менее стандартной?
И еще вопрос - код закритикуйте - где неправильно сделал? как придать коду совершенства?
код
$engine JScript
$uname warn_45lines
$dname warn_45lines
$addin global
$addin stdlib
$addin stdcommands
stdlib.require('TextWindow.js', SelfScript);
stdlib.require('SyntaxAnalysis.js', SelfScript);
global.connectGlobals(SelfScript);
function onSyntaxCheck(cmd)
{
var mdObj, av = windows.getActiveView()
if(!av || !(mdObj = av.mdObj))
return
macrosanalizeModule();
}
function macrosanalizeModule(){
var tw = GetTextWindow();
if (!tw) return;
var parser = snegopat.parseSources(tw.text());
for(var i = 0, c = parser.lexemCount; i < c; i++)
{
var lex = parser.lexem(i)
if(lex.type==40 )
i+= analizeFunction(parser,i,lex);
}
}
function onClick_45Lines(param)
{
if (!param['wnd'])
return
if (!param['wnd'].IsActive())
return
param['wnd'].setCaretPos(param['line']+1,1);
var view = param['wnd'].GetView();
if (!view){}
else
view.activate();
}
function analizeFunction(parser,start,startlex){
line = 0;
name = parser.lexem(start+1).text;
lastline = startlex.line;
var i,c, wnd = GetTextWindow();
for(i = start, c = parser.lexemCount; i< c; i++){
var lex = parser.lexem(i);
var maxLines = 45;
if(lex.type==42){
if(line > maxLines) {
var param = {};
param['wnd'] = wnd;
param['line'] = startlex.line;
message("Функция "+name+" большая. Лишних "+(line - maxLines)+" строк ",mExc1, onClick_45Lines, param);
}
break;
}
if (lex.type == 1) // коменты не считаются кодом.
continue;
line+= (lastline==lex.line) ? 0:1; // смениться после прочтения перевода строки. а это может только при честном переводе или если прочли многострочную строку
lastline =lex.line;
}
return (i - start);
}
// Добавим обработчик команды сохранения файла
stdcommands.Frntend.SyntaxCheck.addHandler(SelfScript.self, "onSyntaxCheck");