aardio+webform写的Python 代码编辑器

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

import win.ui;
/*DSG{{*/
mainForm = win.form(text="WebWin";right=944;bottom=475)
mainForm.add(
pyrun={cls="button";text="运 行";left=109;top=443;right=220;bottom=467;db=1;z=2};
pyshow={cls="edit";text="Edit";left=469;top=6;right=937;bottom=437;bgcolor=0;border=1;color=65280;db=1;dl=1;dr=1;dt=1;hidesel=1;hscroll=1;multiline=1;vscroll=1;z=3};
web={cls="static";text="Static";left=8;top=6;right=465;bottom=435;border=1;db=1;dl=1;dt=1;notify=1;transparent=1;z=1}
)
/*}}*/

import web.form;
var wb=web.form(mainForm.web);
import py3;

mainForm.pyshow.text="";

//重定向输出...>>>>>
var pyCode = /** 
import sys

#写个输出信息的类
class CatchOutErr:
    def __init__(self):
        self.value = ''
    def write(self, txt):
        self.value += txt
#创建有输出功能的对象 
catchOutErr = CatchOutErr()

#标准输入重定向到 catchOutErr (不再输出到默认的『控制台命令行黑窗口』)
sys.stdin = catchOutErr  #这句好像不管用

#标准输出重定向到 catchOutErr (不再输出到默认的『控制台命令行黑窗口』)
sys.stdout = catchOutErr

#标准错误输出重定向到 catchOutErr(不再输出到默认的『控制台命令行黑窗口』)
sys.stderr = catchOutErr
**/
py3.exec( pyCode )
//重定向输出...<<<<<
wb.external = {
    getkeyword=function(){//要行尾加 ":"的关键字
        var keys=/**
            import,0,//导入库
            var,0,//定义变量
            def,1,//定义函数
            for,1,//范围循环
            if,1,//如果...
            while,1,//条件循环
            class,1,//定义类
            elif,1,//否则如果..
            else,1,//否则...
        **/;
        return keys;
    }
}

wb.html = /**
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <style type="text/css">
        html,body{ height:100%; margin:0; } 
        p{margin:0;padding:0;}
           code:{
            line-height:15px;
            width:85%;
            height=100%;
            top=0px;
            left=0px;
            border=1;
            font-size:16px;
            overflow-y:hidden;
        }
    </style>
</head>
<body>
    <table width=100% height=100% border="0">
    <tr>
        <td width=4% height=100% bgcolor="#aabbcc" align=left valign=top>
        <div id="hh" class="code" scroll=no border=1 valign=top align=right>
        0
        </div>
        </td>
        <td align="left"  width=85% bgcolor="#ccffaa" height=100% valign='top'>
            <div id="txt" tabindex="0" onkeydown="keydown(event);setlinenumber();" onkeyup="keyUp(event);setlinenumber();" onkeypress="setlinenumber();" contenteditable="true" class="code">
                <p><font color='#ff00ff'>import</font> os</p>
                <p><font color='#ff00ff'>import</font> sys</p>
                <p>print("九九乘法表")</p>
                <p>for i in range(1,10):</p>
                <p>  for j in range(1,i+1):</p>
                <p>    print(f"{j}x{i}={i*j}",end=" ")</p>
                <p>  print()</p>
                <p></p>
            </div>
        </td>
    </tr>
    </table>
<script language="javascript">
var hhh=document.getElementById("hh");
var tt=document.getElementById("txt");
var pykeys=external.getkeyword();
pykeys=pykeys.replace(" ","");
pykeys=pykeys.replace("    ","");
pykeys=pykeys.split('\n');
var setlinenumber=function(){
    var ttx=tt.innerHTML.split("<p>");
    hhh.innerHTML="";
    for(i=1;i<ttx.length;i++){
        var fc='#ffffff';//彩底白字
        var bk='#'+(i*35%255).toString(16)+(i*55%255).toString(16)+(255).toString(16);
        hhh.innerHTML+="<p><span style='background:"+bk+";color:"+fc+";'>"+i+"</span></p>";
    }
}
var keydown=function(event){
    var curp=getPtext(event);
    var pp=tt.getElementsByTagName("P");
    //alert(event.keyCode);
    for(var i=0;i<pp.length;i++){
        var clss=pp[i].textContent;
        if(event.ctrlKey && (event.key=="V"||event.key=="v")){setlinenumber();}
        if(clss==curp){//判断是否为当前行
            if(event.keyCode==13){//按下回车键
                cl=(clss.trim()).split(" ");
                for(var j=0;j<pykeys.length;j++){//循环关键字
                    pk=pykeys[j].trim().split(',')
                    if(cl[0]==pk[0]){//判断是否为关键字
                        var tmp=pp[i].innerHTML;
                        if(pk[1]=='1' && cl[cl.length-1].substr(-1)!=':'){//加冒号
                            //pp[i].textContent+=":";
                            tmp=tmp.replace("<font color='#ff00ff'>","");//去除原有着色
                            tmp=tmp.replace("<\/font>","");//去除原有着色
                            tmp=tmp.replace(pk[0],"<font color='#ff00ff'>"+pk[0]+"<\/font>")+":";
                        } else {
                            tmp=tmp.replace("<font color='#ff00ff'>","");//去除原有着色
                            tmp=tmp.replace("<\/font>","");//去除原有着色
                            tmp=tmp.replace(pk[0],"<font color='#ff00ff'>"+pk[0]+"<\/font>");
                        }
                        pp[i].innerHTML=tmp;
                    } 
                }                
            }
            
        }
        //var reg=/^\s*(\S+)/;//^表示从字符串开始位置,\s* 0个或多个空白字符 (\S+) \S 非空白字符,+ 一个或多个非空白字符
        //alert(clss.match(reg));
    }
}

var keyUp=function(event){
    //下面加入自动缩进代码
    if(event.key=="Enter"){
        var lp=tt.getElementsByTagName("P");
        var lnum=getcurlinenumber(event);
        var lpt=lp[lnum-2].textContent.trim();
        var tmp=lp[lnum-2].innerHTML;
        tmp=tmp.replace('<font color="#ff00ff">',"");//去除原有着色
        tmp=tmp.replace("</font>","");//去除原有着色
        var tabspace=tmp.replace(lpt,"");//lp[lnum-2].innerText.match(/^\s*/)[0];
        //alert("["+lpt+"]"+tabspace+"");
        setPHtml(lnum-1,tabspace);
    }
    if(event.key=="Tab"){
        var range=window.getSelection().getRangeAt(0);
        var text='\t';//"    ";
        range.deleteContents();
        var tnode=document.createTextNode(text);
        range.insertNode(tnode);
    }
}


setPHtml=function(linenum,txt){
var lp=tt.getElementsByTagName("P");
var rg=document.createRange();
//var sel=window.getSelection();
rg.setStart(tt.childNodes[linenum*2-1],0);
rg.collapse(true);
//sel.removeAllRanges();
//sel.addRange(rg);
lp[linenum].innerHTML=txt;
}
var getcurlinenumber=function(event){
    var cursorText=window.getSelection().getRangeAt(0).startContainer.textContent;
    var lines=tt.getElementsByTagName("P");
    var linenumber=0;
    for(var i=0;i<lines.length;i++){
        if(cursorText.trim()==lines[i].textContent.trim()){
            linenumber=i;
            break;
        }
    }
    return(linenumber+1);
}

var getPtext=function(event){//<p>与</p>之间不能含有其它标贴,如果文字有重复,的,有点无语
    //var ele=event.target;
    var cursorText=window.getSelection().getRangeAt(0).startContainer.textContent;
    /*
        //startOffset  选区开始位置
        //startContainer  选区开始容器
        //endOffset  选区结束位置
        //endContainer  选区结束容器
    */
    return(cursorText);
}

setlinenumber();

</script>
</body>
</html>

**/

mainForm.pyrun.oncommand = function(id,event){
    mainForm.pyshow.text="";
    var mbx=wb.getEle("txt").innerText;
    mbx=string.replace(mbx,'\r\n','\n');
    mbx=string.replace(mbx,'\n\n','\n');
    py3.main.catchOutErr.value="";//清除错误信息
    mainForm.pyshow.print("【运行结果,如下:】");
    py3.exec(mbx);
    var pyrtn=string.split(tostring(py3.main.catchOutErr.value ),'\n');//获取控制台输出信息
    for(i=1;#pyrtn;1){
        var xx=string.match(pyrtn[i],"line[ ]\d+");
        if(xx){xx=string.split(xx," ")[2];mainForm.pyshow.print("出错行:",xx);}
        else{mainForm.pyshow.print(pyrtn[i]);}//显示到指定窗口
        sleep(50)
    }
}

mainForm.show();
return win.loopMessage();

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值