Julia: 自制的Julia代码排版工具CodeBeautify

前些天,尝试写了一个简单实用的代码排版工具(看到rustfmt痒呀,但没有办法!),于是动了自制的念头。经过几天的努力,终于解决了我很久以来Julia有关代码排版库的缺失带来的困扰(可能很少有人知道我经历了JuliaStudio->LightTable->Atom各种坑,留下了巨量的库存代码!一直无法管理。),现在CodeBeautify终可以用上了。 我已经测试过,也通过了相应的一些测试代码(如下),正常情况可以用,我的几十个.jl文件代码没有问题。当然bug肯定也是有的,其中一些代码还没有来得及优化(个别函数太长等)。如果有发现问题的,请及时和我联系。

一、如何使用?
很简单,只需要使用其中的codebeautify函数就可以。
Julia>using CodeBeautify;
Julia>path =”D:\strategyJulia\strategyGroup\old\BBGS_days_fun.jl”;
Julia>codebeautify(path) ;# 对指定路径path的.jl文件进行代码排版

另外,此代码可以实现对CodeBeautify库的自举。

二、相关的测试代码 (updated : 2016-11-20)

针对这个代码库可能存在的问题,我设定了以下的检测代码,目前全部通过:

using CodeBeautify;
# NO BUG =>

# _space =>ok
@assert _space("if !isempty(instrs) #&& isempty?")=="if !isempty(instrs) #&& isempty?"
@assert _space("if   !isempty(instrs) #&& isempty?")=="if !isempty(instrs) #&& isempty?"
@assert _space("if   !isempty(instrs)    #&& isempty?")=="if !isempty(instrs) #&& isempty?"
@assert _space("if   !isempty(instrs)    #   && isempty?")=="if !isempty(instrs) #   && isempty?"
@assert _space("if   !isempty(    instrs)    #   && isempty?")=="if !isempty(instrs) #   && isempty?"

# <: =>ok
@assert _format("function csv2H5ArrayData{T <:Any}(data)")==
                "function csv2H5ArrayData{T <: Any}(data)"
@assert _format("function csv2H5ArrayData{T <: Any}(data)")==
                                "function csv2H5ArrayData{T <: Any}(data)"
@assert _format("getDateTime{T<: String}")=="getDateTime{T <: String}"
@assert _format("Data{T <:}") =="Data{T <: }"
@assert _format("Data{T<:}") =="Data{T <: }"
@assert _format("Data{T <: }") =="Data{T <: }"
@assert _format("Data{T<:Any}") =="Data{T <: Any}"
@assert _format("Data{T<: Any}") =="Data{T <: Any}"
@assert _format(_space("Data{T  <: Any}")) =="Data{T <: Any}"

# # =>ok
@assert split_byspace("a= b # if")==["a=","b","# if"]
@assert split_byspace("a = b      #   if")==["a","=","b","#   if"]
@assert split_byspace("for gp in groups")==["for","gp","in","groups"]
split_byspace("function getStandardDateTimeStringToMinute(dt::Dates.DateTime)")
split_byspace("# 输出:格式2012 - 1 - 2 09:40:00")

# +-*/ =>ok
@assert _add_subtract_multiply_divide("return (dayNetValue./ initialFund,dayNetValueDictData);")==
                                       "return (dayNetValue ./ initialFund,dayNetValueDictData);"
@assert _add_subtract_multiply_divide(_space("   aAA // b"))=="aAA // b"
@assert _add_subtract_multiply_divide("aAA//b")=="aAA // b"
@assert _add_subtract_multiply_divide("a//b")=="a // b"
@assert _add_subtract_multiply_divide("a //b")=="a // b"
@assert _add_subtract_multiply_divide("a// b")=="a // b"
@assert _add_subtract_multiply_divide("a // b")=="a // b"
@assert _add_subtract_multiply_divide("aa // bb")=="aa // bb"
@assert _add_subtract_multiply_divide("aa //bb")=="aa // bb"
@assert _add_subtract_multiply_divide("aa//bb")=="aa // bb"
@assert _add_subtract_multiply_divide("io = open(path,\"w+\")")=="io = open(path,\"w+\")";
@assert _add_subtract_multiply_divide("a/b")=="a / b"
@assert _add_subtract_multiply_divide("aAA/b")=="aAA / b"

@assert _add_subtract_multiply_divide("a./b")=="a ./ b"
@assert _add_subtract_multiply_divide("aAA./b")=="aAA ./ b"
@assert _add_subtract_multiply_divide("a ./b")=="a ./ b"
@assert _add_subtract_multiply_divide("aAA ./b")=="aAA ./ b"
@assert _add_subtract_multiply_divide("a ./ b")=="a ./ b"
@assert _add_subtract_multiply_divide("aAA ./   b")=="aAA ./   b"
# 11-20
@assert _add_subtract_multiply_divide("yp = X * a.+ b;") =="yp = X * a .+ b;"
@assert _add_subtract_multiply_divide("yp = X*a.+ b;") =="yp = X * a .+ b;"
@assert _add_subtract_multiply_divide("yp = X*a .+ b;") =="yp = X * a .+ b;"
@assert _add_subtract_multiply_divide("yp = X* a;") =="yp = X * a;"
@assert _add_subtract_multiply_divide("yp = X*a;") =="yp = X * a;"
@assert _add_subtract_multiply_divide("yp = X*a.+b;") =="yp = X * a .+ b;"
@assert _add_subtract_multiply_divide("yp = X* a.")=="yp = X * a."
@assert _add_subtract_multiply_divide("yp = X* a.+;")=="yp = X * a .+ ;"
@assert _add_subtract_multiply_divide("yp = X*a.+;")=="yp = X * a .+ ;"
@assert _add_subtract_multiply_divide("yp = X*a.;")=="yp = X * a.;"
@assert _add_subtract_multiply_divide("yp = X*a.; # a+b")=="yp = X * a.; # a+b"

@assert _add_subtract_multiply_divide("a+b")=="a + b"
@assert _add_subtract_multiply_divide("a + b")=="a + b"
@assert _add_subtract_multiply_divide("a +b")=="a + b"
@assert _add_subtract_multiply_divide("aaa+b")=="aaa + b"
@assert _add_subtract_multiply_divide("aaa +b")=="aaa + b"
@assert _add_subtract_multiply_divide("aaa + b")=="aaa + b"
@assert _add_subtract_multiply_divide("aaa+ b")=="aaa + b"
@assert _add_subtract_multiply_divide("aaa.+ b")=="aaa .+ b"
@assert _add_subtract_multiply_divide("aaa .+ b")=="aaa .+ b"
@assert _add_subtract_multiply_divide("aaa .+b")=="aaa .+ b"
@assert _add_subtract_multiply_divide("aaa.+b")=="aaa .+ b"
@assert _add_subtract_multiply_divide("aaa.+")=="aaa .+"
@assert _add_subtract_multiply_divide("aaa.+ ")=="aaa .+ "
@assert _add_subtract_multiply_divide("aaa+")=="aaa +"
@assert _add_subtract_multiply_divide("aaa .+ ")=="aaa .+ "
@assert _add_subtract_multiply_divide("Th = 0.01*ratio")=="Th = 0.01 * ratio"
@assert _add_subtract_multiply_divide("unitReturn = priceDelta*tradeVolume*multiplier-tradeFee;")==
                                      "unitReturn = priceDelta * tradeVolume * multiplier - tradeFee;"
@assert _add_subtract_multiply_divide("bool_exit_stopLoss = bar.Close > openPrice*(1.0+StopLossTh);")==
                                      "bool_exit_stopLoss = bar.Close > openPrice * (1.0 + StopLossTh);"
@assert _add_subtract_multiply_divide("downCount = downCount+1")=="downCount = downCount + 1"

# _format =>ok
@assert _format("a=>") =="a =>"
@assert _format("a=>b") =="a => b"
@assert _format("aa=>") =="aa =>"
@assert _format("aaa=>b") =="aaa => b"
@assert _format("aaaa=>b")=="aaaa => b"
@assert _format("aaaa=>")=="aaaa =>"
@assert _format("strDict =Dict(1 =>0000)") =="strDict = Dict(1 => 0000)"
# OK
@assert _format("s/y")=="s/y"
@assert _format("s//y")=="s//y"
@assert _format("s*y")=="s*y"
@assert _format("y =y+1")=="y = y+1"
@assert _format("y++")=="y++"
@assert _format("2.+2")=="2.+2"

@assert _format("\" abec.>=\" ")=="\" abec.>=\" "
@assert _format("\" abec.>=\"")=="\" abec.>=\""
@assert _format("\" abec.>= \"")=="\" abec.>= \""
@assert _format("\" abec .>= d\" ")=="\" abec .>= d\" "
@assert _format("\" abec .>= d")=="\" abec .>= d"
@assert _format("\" abec .>=o")=="\" abec .>=o"
@assert _format("\" abec .>= ")=="\" abec .>= "
@assert _format("\" abec .>= \"")=="\" abec .>= \""
@assert _format("\"abec =d")=="\"abec =d"
@assert _format("\"abec =d\"")=="\"abec =d\""
@assert _format("\"abec =d\" ")=="\"abec =d\" "
@assert _format("\"abec =d   \" ")=="\"abec =d   \" "
@assert _format("\"abec ===d   \" ")=="\"abec ===d   \" "
@assert _format("\"abec ===d   \" ")=="\"abec ===d   \" "
@assert _format("\" abec .>=d   \" ")=="\" abec .>=d   \" "
@assert _format("\" abec.>= d\" ")=="\" abec.>= d\" "
@assert _format("\"x=y\"") =="\"x=y\""

@assert _format("abec !== d")=="abec !== d"
@assert _format(" abec >= ")==" abec >= "
@assert _format("abec!==d")=="abec !== d"
@assert _format("abec !==d  ")=="abec !== d  "

@assert _format("abec !==d")=="abec !== d"
@assert _format("abec!==d")=="abec !== d"
@assert _format("abec !=d")=="abec != d"
@assert _format("abec .>=d")=="abec .>= d"

@assert _format("c !==d")=="c !== d"
@assert _format("c!==d")=="c !== d"
@assert _format("c !=d")=="c != d"
@assert _format("c .>=d")=="c .>= d"

@assert _format("c !=d")=="c != d"
@assert _format("c!=d")=="c != d"
@assert _format("c !=d")=="c != d"
@assert _format("c .>=d")=="c .>= d"
@assert _format("c !=d")=="c != d"

@assert _format("c=d")=="c = d"
@assert _format("c> d")=="c > d"
@assert _format("c.>d")=="c .> d"

@assert _format("c===b")=="c === b"
@assert _format("c>b")=="c > b"
@assert _format("c.> b")=="c .> b"


@assert _format("abec !=d")=="abec != d"

@assert _format("series> windowN")=="series > windowN"
@assert _format("s> ccccc")=="s > ccccc"
@assert _format("ss> cccc")=="ss > cccc"
@assert _format("ss> c")=="ss > c"
@assert _format("ss>c")=="ss > c"
@assert _format("ssss> ")=="ssss > "
@assert _format("ssss.> ")=="ssss .> "
@assert _format("s.> ")=="s .> "
# 普通
@assert _format("x=y") =="x = y"
@assert _format("x.=y")=="x .= y"
@assert _format("abcd=y") =="abcd = y"
@assert _format(_space("abdcd = y"))=="abdcd = y"
@assert _format(_space(" abcd>y"))=="abcd > y"
@assert _format("a>y")=="a > y"
@assert _format(_space("a > y"))=="a > y"
@assert _format("a.<y")=="a .< y"
@assert _format("aaaaa.<y")=="aaaaa .< y"
@assert _format("aaaaa .< y")=="aaaaa .< y"
@assert _format("a> ")=="a > "
@assert _format("aaaaa > ")=="aaaaa > "
@assert _format("aaaa >   ")=="aaaa >   "
@assert _format("aaaa.>y")=="aaaa .> y"
@assert _format("x=y")=="x = y"
@assert _format("xxxxx=y")=="xxxxx = y"
@assert _format("xxx.=y")=="xxx .= y"
@assert _format(_space("xxxx  = y"))=="xxxx = y"
@assert _format("xxxx = y")=="xxxx = y"
@assert _format("xxxx = ")=="xxxx = "
@assert _format("xxxx=y  ")=="xxxx = y  "
@assert _format("xxx===y")=="xxx === y"
@assert _format("xxx ===y")=="xxx === y"
@assert _format("xxx === y")=="xxx === y"
@assert _format("xxx === ")=="xxx === "
@assert _format("xxx=== ")=="xxx === "
@assert _format("xxx.>=u")=="xxx .>= u"
@assert _format("xxx!=u")=="xxx != u"
@assert _format("xxx != u")=="xxx != u"
@assert _format("xxx != ")=="xxx != "
@assert _format("flag==1 && return true;")=="flag == 1 && return true;"
@assert _format("upC=upC+1;")=="upC = upC+1;"

三、源代码 (updated : 2016-11-20)

让人要吐的代码如下:

module CodeBeautify
export codebeautify,stringindex,_format,_indent,_space,split_byspace,isPreIndent_left,isPreIndent_right,getHeadSpaceNum
export isCurrIndent_left,writeScript,_add_subtract_multiply_divide,_tab
const indent_num = 4;
const space_unit =" ";

# path ="D:\\strategyJulia\\testModule.jl";
# data=readlines(open(joinpath(path)))
# io =open(path,"w + ")
# write(io,strs)
# close(io)

getstrs(strs::String) = collect(take(strs,length(strs)))

getindexstrs(strs::String,n,m) = String(getstrs(strs)[n:m])

getindexstrs(strs::String,n) = getindexstrs(strs,n,n)

function stringindex(strs::String,n,m)

    if isascii(strs)
        return strs[n:m]
    else
        return getindexstrs(strs,n,m)
    end
end
stringindex(strs,n) = stringindex(strs,n,n);

function codebeautify(path::String)
    data = readlines(open(joinpath(path)));
    newdata = String[];
    len = length(data)
    len  == 0 && return;
    for i = 1:len
        strs = _tab(data[i]) # 首先对原始数据进行去制表符化,
        #println("beautify i => $i  总共行数:$len")
        temp = _add_subtract_multiply_divide(_format(_space(strs)))
        if i != 1
            prestrs = identity(newdata[end])
            temp = identity(_indent(temp,prestrs));
        end
        #println(temp)
        push!(newdata,temp);
    end
    writeScript(path,newdata);
end

function _indent(strs::String,prestrs::String)
    # 处理缩进或突进
    # 处理一个空函数
    # df2[:key2] = ["发生时间:" for x in 1:19] 中括号中的for,
    prenum = getHeadSpaceNum(prestrs);
    prewords = split_byspace(prestrs)
    currwords = split_byspace(strs)

    ismove_left =  isPreIndent_left(prewords) ||isCurrIndent_left(currwords);#
    if ismove_left &&   isPreIndent_right(prewords)
        return strs
    end
    if ismove_left
        distance = prenum - indent_num
        if prenum > 0
            return string(repeat(space_unit,distance),strs)
        else
            println("is last row? distance :$distance")
        end
    end
    if isPreIndent_right(prewords)
        distance = prenum + indent_num
        return string(repeat(space_unit,distance),strs)
    end
    return string(repeat(space_unit,prenum),strs)
end

function split_byspace(strs::String) # 考虑转义符

    len = length(strs)
    data = String[];
    strDict = Dict("\""=>0,"\'"=>0)
    (isempty(strs)||len  == 0) && return data;
    flag_start = 1;
    flag_end = 1;
    sumnum = 0
    ishead = false;
    isbracket_left =false;
    isbracket_right =false;
    if len  == 1
        if strs  == space_unit
            return data
        else
            return strs;
        end
    end
    for i = 1:len
        str = stringindex(strs,i)
        #println(" i :$i start :$flag_start end: $flag_end  len: $len")
        if in(str,["[","]"])
            if str =="["
                isbracket_left =true
                isbracket_right =false
            else
                isbracket_left =false;
                isbracket_right =true
            end
        end
        if isbracket_left # a = ["c" for i in 1:19]
            flag_end =i;
            continue;
        end
        if isbracket_right
            isbracket_right = false;
            flag_end = i;
            temp = stringindex(strs,flag_start+1,flag_end)
            (length(temp) > 0  && temp != repeat(space_unit,length(temp)))  && push!(data,temp);
            continue;
        end

        if in(str,["\\"]) # path
            temp = stringindex(strs,flag_start,len)
            (length(temp) > 0  && temp != repeat(space_unit,length(temp)))  && push!(data,temp)
            break;
        end
        if in(str,["#"])
            if i == 1
                temp = stringindex(strs,flag_start,len)
                (length(temp) > 0  && temp != repeat(space_unit,length(temp)))  && push!(data,temp)
                break;
            else
                temp = stringindex(strs,flag_start + 1,i - 1);
                (length(temp) > 0  && temp != repeat(space_unit,length(temp))) && push!(data,temp);
                temp2 = stringindex(strs,i,len)
                (length(temp2) > 0  && temp2 != repeat(space_unit,length(temp2))) && push!(data,temp2)
                break;
            end
        end
        if in(str,["\"","\'"])
            strDict[str] = identity(strDict[str]) + 1;
            sumnum = sum(values(strDict));
            if rem(sumnum,2) != 0
                flag_start = i;
            end
            if rem(sumnum,2)  == 0
                flag_end = i;
            end
            #println(sumnum)
        end
        if i  == 1 && str  == space_unit
            ishead = true;
        end
        if str != space_unit
            ishead = false;
            flag_end = i;
        end
        if ishead && str  == space_unit && i < len
            flag_start = i + 1;
        end
        if i > 2 && stringindex(strs,i - 1)  == space_unit && str != space_unit
            if rem(sumnum,2)  == 0 && !in(str,["\"","\'","\\"])
                flag_start = i;
            end
        end
        if in(str,["\r","\n"])
            temp = stringindex(strs,flag_start,i - 1);
            (length(temp) > 0  && temp != repeat(space_unit,length(temp))) && push!(data,temp)
            flag_end = i;
            flag_start = i;
            continue;
        end
        if (i < len && str != space_unit  && stringindex(strs,i + 1)  == space_unit)||
            (i  == len && str != space_unit)||
            in(str,["\"","\'","\\"])
            if rem(sumnum,2)  == 0
                flag_end = i;
                temp = stringindex(strs,flag_start,flag_end)
                (length(temp) > 0  && temp != repeat(space_unit,length(temp)))  && push!(data,temp)
                #println("=>  $flag_end")
            end
        end
    end
    #println("start :$flag_start end: $flag_end  len: $len")
    return data
end

function _format(strs::String)
    data ="";
    len = length(strs)
    strDict = Dict("\""=>0,"\'"=>0)
    for i in 1:len
        str = stringindex(strs,i)
        if in(str,["#","\\"])  # 跳出循还
            data = string(data,stringindex(strs,i,len));
            break;
        elseif in(str,["\"","\'"])
            strDict[str] = identity(strDict[str]) + 1;
        end
        sumnum = sum(values(strDict));
        if str != "="
            if i  == 1
                data = str;
                continue;
            end
            prestr = stringindex(strs,i - 1)
            # str ="\"";"\'"
            if in(str,["\"","\'"]) # ="\"", .=="\"",.="\"" 大到三种模式
                if prestr=="="
                    if i  == 2
                        data = string(identity(data),stringindex(strs,1,len));
                        break;
                    elseif i  == 3 # x=\"; x=\'
                        prestr2 = stringindex(strs,i - 2)
                        if !in(prestr2,["="])
                            if rem(sumnum,2) != 0 # 偶数
                                data = string(prestr2,space_unit,"=",space_unit,str);
                            else
                                data = string(prestr2,space_unit,"=",str)
                            end
                        else
                            data = string(identity(data),stringindex(strs,i,len));
                            break;
                        end
                    elseif i  == 4 #x.=\"
                        prestr2 = stringindex(strs,i - 2)
                        prestr3 = stringindex(strs,i - 3)
                        if in(prestr2,["."])
                            if prestr3 != space_unit
                                if rem(sumnum,2) != 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2) != 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        elseif in(prestr2,["="])
                            if prestr3 != space_unit
                                if rem(sumnum,2) != 0
                                    if str != space_unit
                                        data = string(identity(data),space_unit,stringindex(strs,i - 2,i - 1),space_unit,str)
                                    else
                                        data = string(identity(data),space_unit,stringindex(strs,i - 2,i - 1),str)
                                    end
                                else
                                    data = string(identity(data),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2) != 0
                                    if str != space_unit
                                        data = string(identity(data),stringindex(strs,i - 2,i - 1),space_unit,str)
                                    else
                                        data = string(identity(data),stringindex(strs,i - 2,i - 1),str)
                                    end
                                else
                                    data = string(identity(data),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        else # =\"
                            if prestr2 != space_unit # ba=\"
                                if rem(sumnum,2) != 0
                                    data = string(identity(data),space_unit,prestr,space_unit,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            else # a空格=\"
                                if rem(sumnum,2) != 0
                                    data = string(identity(data),prestr,space_unit,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            end
                        end
                    else # x.==\"
                        prestr2 = stringindex(strs,i - 2);
                        prestr3 = stringindex(strs,i - 3);
                        if prestr2=="=" # ==\"
                            if in(prestr3,["="])
                                data = string(identity(data),prestr3,prestr2,prestr,str)
                            else
                                data = string(identity(data),prestr2,prestr,str)
                            end
                        elseif in(prestr2,["."]) # a.=\"
                            data = string(identity(data),prestr,str)
                        else # b=\'
                            data = string(identity(data),prestr,str)
                        end
                    end
                else # =d\
                    data = string(identity(data),str)
                end
            elseif in(str,[" "]) # 当前是空格 =>重新改写
                if prestr =="="
                    if i  == 2 # x=2
                        data = string(identity(data),stringindex(strs,1,len));
                        break;
                    elseif i  == 3 # x=空格
                        prestr2 = stringindex(strs,i - 2)
                        if !in(prestr2,[">","<",".","!"])
                            #println("3 - >sum: $sumnum  str:$(str)")
                            if rem(sumnum,2)  == 0 # 偶数
                                data = string(prestr2,space_unit,"=",str);
                            else
                                data = string(prestr2,"=",str)
                            end
                        else # !=空格
                            data = string(identity(data),stringindex(strs,i,len));
                            break;
                        end
                    elseif i  == 4
                        prestr2 = stringindex(strs,i - 2);
                        if prestr2  == space_unit #a空格=空格
                            data = string(identity(data),"=",str)
                        else # #a=空格
                            if in(prestr2,[">","<",".","!"]) # A.=空格
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                                else# ab=空格
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),space_unit,prestr,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            end
                        end
                    else # >=5 BUG: " abec >= "
                        prestr2 = stringindex(strs,i - 2);
                        prestr3 = stringindex(strs,i - 3);
                        prestr4 = stringindex(strs,i - 4);
                        if prestr2=="=" # ==空格
                            if in(prestr3,["="]) # x===空格; x.==空格;
                                if prestr4 != space_unit
                                    if rem(sumnum,2)  == 0 # x===空格 ;
                                        data = string(identity(data),space_unit,prestr3,prestr2,prestr,str)
                                    else # x===空格 ;
                                        data = string(identity(data),prestr3,prestr2,prestr,str)
                                    end
                                else # x空格===空格 ;
                                    data = string(identity(data),prestr3,prestr2,prestr,str)
                                end
                            elseif in(prestr3,[".","!"])
                                if prestr4 != space_unit
                                    if rem(sumnum,2)  == 0 ## xxx.==空格
                                        data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr3,prestr2,prestr,str)
                                    else
                                        data = string(identity(data),prestr3,prestr2,prestr,str)
                                    end
                                else ## xxx空格.==空格
                                    data = string(identity(data),prestr2,prestr,str)
                                end
                            else
                                data = string(identity(data),space_unit,prestr2,prestr,str)
                            end
                        elseif in(prestr2,[">","<"])
                            if in(prestr3,["."]) # .<=
                                if prestr4 != space_unit # x.<=空格
                                    if rem(sumnum,2)  == 0
                                        data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 3,i - 1),str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 3,i - 1),str)
                                    end
                                else # 空格.<=空格
                                    data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 3,i - 1),str)
                                end
                            elseif in(prestr3,[" "]) # a空格<=空格 " abec >= "
                                data = string(identity(data),prestr,str)
                            else # a>=空格
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        elseif in(prestr2,[".","!"])
                            if prestr3 != space_unit # x.=空格 ;x!=空格
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            else # 空格.=空格
                                data = string(identity(data),prestr,str)
                            end
                        elseif in(prestr2,[" "]) # xxxx =
                            data = string(data,prestr,str);
                        else # 不在其中
                            # x=空格 ;
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),space_unit,prestr,str)
                            else
                                data = string(identity(data),prestr,str)
                            end
                        end
                    end # 前一字符为=
                elseif in(prestr,["<",">"]) # x<2? x:y; x.< y? 5.0<y? 5.<y; a=>b a => b
                    if i  == 2
                        data = string(identity(data),str);
                    elseif i  == 3 # x>空格
                        if rem(sumnum,2)  == 0
                            data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr,str)
                        else
                            data = string(identity(data),str)
                        end
                    else
                        prestr2 = stringindex(strs,i - 2)
                        prestr3 = stringindex(strs,i - 3)
                        if prestr2=="."
                            if prestr3 != space_unit
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 2,i - 1),str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2)  == 0
                                    if str != space_unit
                                        data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),space_unit,str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),str)
                                    end
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        else
                            if prestr2 != space_unit # xzy>空格
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr,str)
                                else
                                    data = string(identity(data),str)
                                end
                            else # xz空格>空格
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),str)
                                else
                                    data = string(identity(data),str)
                                end
                            end
                        end
                    end
                else # "xxxx  = y "
                    data = string(identity(data),str)
                end
            elseif in(str,[">"])
                if in(prestr,["="])
                    if i  == 2
                        data = string(prestr,str);
                    elseif i  == 3
                        prestr2 = stringindex(strs,i - 2)
                        data = string(prestr2,space_unit,prestr,str)
                    else # a=>
                        prestr2 = stringindex(strs,i - 2);
                        prestr3 = stringindex(strs,i - 3);
                        if prestr2 != space_unit # aa=>
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),space_unit,prestr,str)
                            else
                                data = string(identity(data),prestr,str)
                            end
                        else # aa =>
                            data = string(identity(data),prestr,str)
                        end
                    end
                else
                    data = string(identity(data),str)
                end
            elseif in(str,[":"]) # => csv2H5ArrayData{T <:Any},
                if prestr=="<"
                    if i==2
                        data =string(identity(data),stringindex(strs,i,len))
                    else # i>=2
                        if i==len # data =a < :
                            data =string(identity(stringindex(data,i,length(data))),str)
                        else
                            prestr2 =stringindex(strs,i-2)
                            str2 =stringindex(strs,i+1)
                            if str2!=space_unit  # data =a <:b
                                if prestr2 !=space_unit
                                    if rem(sumnum,2)==0
                                        data =string(identity(stringindex(data,1,length(data)-1)),space_unit,prestr,str,space_unit)
                                    else
                                        data =string(identity(data),str)
                                    end
                                else
                                    if rem(sumnum,2)==0
                                        data =string(identity(stringindex(data,1,length(data)-1)),prestr,str,space_unit)
                                    else
                                        data =string(identity(data),str)
                                    end
                                end
                            else  # data =a <:空格
                                if prestr2 !=space_unit
                                    if rem(sumnum,2)==0
                                        data =string(identity(stringindex(data,1,length(data)-1)),space_unit,prestr,str)
                                    else
                                        data =string(identity(data),str)
                                    end
                                else
                                    data =string(identity(data),str)
                                end
                            end
                        end
                    end
                else
                    data =string(identity(data),str)
                end
            else # 当前字符 str 不是 \"; \',不空格
                if prestr =="="# !==,>=;.>=,===,.==;=;.=;==;
                    if i  == 2 # x=2
                        data = string(identity(data),stringindex(strs,1,len));
                        break;
                    elseif i  == 3 # x=2
                        prestr2 = stringindex(strs,i - 2)
                        if !in(prestr2,[">","<",".","!"])
                            #println("3 - >sum: $sumnum  str:$(str)")
                            if rem(sumnum,2)  == 0 # 偶数
                                if str != space_unit
                                    data = string(prestr2,space_unit,"=",space_unit,str);
                                else
                                    data = string(prestr2,space_unit,"=",str);
                                end
                            else
                                data = string(prestr2,"=",str)
                            end
                        else
                            data = string(identity(data),stringindex(strs,i,len));
                            break;
                        end
                    elseif i  == 4 #i==4,5....; x==2 ; x.=2; x<=3 ; 防范等号前的空号 是不是要改写一下(按i==5格式?)???
                        prestr2 = stringindex(strs,i - 2);
                        prestr3 = stringindex(strs,i - 3);
                        if in(prestr2,[".",">","<","!"])
                            if prestr3 != space_unit
                                if rem(sumnum,2)  == 0
                                    if str != space_unit
                                        data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),space_unit,str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),str)
                                    end
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        elseif in(prestr2,["="])
                            if prestr3 != space_unit
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),space_unit,stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(data),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(data),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        elseif in(prestr2,[" "])
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),stringindex(strs,i - 1),space_unit,str)
                            else
                                data = string(identity(data),stringindex(strs,i - 1),str)
                            end
                        else
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),space_unit,stringindex(strs,i - 1),space_unit,str)
                            else
                                data = string(identity(data),stringindex(strs,i - 1),str)
                            end
                        end
                    else # >5 ; abec .>= d
                        prestr2 = stringindex(strs,i - 2);
                        prestr3 = stringindex(strs,i - 3);
                        prestr4 = stringindex(strs,i - 4);
                        if prestr2=="=" # ==Y ;"abec !==d"
                            if in(prestr3,[".","=","!"]) # x===2; x.==2;X!==2
                                if prestr4 != space_unit #"abec !==d"
                                    if in(prestr3,[".","!"]) # data要少取一个字符 xxx!==y
                                        if rem(sumnum,2)  == 0
                                            data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr3,prestr2,prestr,space_unit,str)
                                        else
                                            data = string(identity(data),prestr2,prestr,str)
                                        end
                                        #println(data)
                                    else # xxx===y
                                        if rem(sumnum,2)  == 0
                                            data = string(identity(data),space_unit,prestr3,prestr2,prestr,space_unit,str)
                                        else #
                                            data = string(identity(data),prestr3,prestr2,prestr,str)
                                        end
                                    end
                                else #x空格.==2
                                    if in(prestr3,[".","!"]) # data要少取一个字符 xxx !==y
                                        if rem(sumnum,2)  == 0
                                            data = string(identity(stringindex(data,1,length(data) - 1)),prestr3,prestr2,prestr,space_unit,str)
                                        else
                                            data = string(identity(data),prestr2,prestr,str)
                                        end
                                    else # x空格===2
                                        if rem(sumnum,2)  == 0
                                            data = string(identity(data),prestr3,prestr2,prestr,space_unit,str)
                                        else
                                            data = string(identity(data),prestr3,prestr2,prestr,str)
                                        end
                                    end
                                end
                            elseif in(prestr3,[" "])# xxx空格==y
                                data = string(identity(data),prestr2,prestr,space_unit,str)
                            else # xxx==y
                                data = string(identity(data),space_unit,prestr2,prestr,space_unit,str)
                            end
                        elseif in(prestr2,[">","<"])
                            if in(prestr3,["."]) # .<=
                                if prestr4 != space_unit # xxx.<=y
                                    if rem(sumnum,2)  == 0
                                        data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,prestr3,prestr2,prestr,space_unit,str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),prestr3,prestr2,prestr,str)
                                    end
                                else ## xxx空格.<=y
                                    if rem(sumnum,2)  == 0
                                        data = string(identity(stringindex(data,1,length(data) - 2)),prestr3,prestr2,prestr,space_unit,str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),prestr3,prestr2,prestr,str)
                                    end
                                end
                            elseif in(prestr3,[" "]) # a <=y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 2)),prestr2,prestr,space_unit,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            else # a>=y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr2,prestr,space_unit,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            end
                        elseif in(prestr2,[".","!"])
                            if prestr3 != space_unit # x.=y ;x!=y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),space_unit,str)
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 1)),stringindex(strs,i - 2,i - 1),str)
                                end
                            end
                        elseif in(prestr2,[" "]) # x =y
                            if prestr3  == space_unit # 空格空格=y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),prestr2,prestr,space_unit,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            else # # x空格=y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),prestr,space_unit,str)
                                else
                                    data = string(identity(data),prestr,str)
                                end
                            end
                        else # xxxxx=y
                            if rem(sumnum,2)  == 0 # 偶数
                                data = string(identity(data),space_unit,prestr,space_unit,str)
                            else
                                data = string(identity(data),prestr,str)
                            end
                        end
                    end
                elseif in(prestr,["<",">"]) # x<2? x:y; x.< y? 5.0<y? 5.<y
                    if i  == 2
                        data = string(identity(data),str);
                    elseif i  == 3
                        if rem(sumnum,2)  == 0
                            if str != space_unit
                                data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr,space_unit,str)
                            else
                                data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr,str)
                            end
                        else
                            data = string(identity(data),str)
                        end
                    else # x>y
                        prestr2 = stringindex(strs,i - 2)
                        prestr3 = stringindex(strs,i - 3)
                        if prestr2=="."
                            if prestr3 != space_unit
                                if rem(sumnum,2)  == 0
                                    if str != space_unit
                                        data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 2,i - 1),space_unit,str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 2,i - 1),str)
                                    end
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),str)
                                end
                            else
                                if rem(sumnum,2)  == 0
                                    if str != space_unit
                                        data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),space_unit,str)
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),str)
                                    end
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 2)),stringindex(strs,i - 2,i - 1),str)
                                end
                            end # x.>y ;x.<y
                        elseif in(prestr2,["="]) #
                            if prestr3 != space_unit # "a=>b " "a=<b"
                                if rem(sumnum,2)  == 0 && in(prestr,[">"])
                                    data = string(identity(stringindex(data,1,length(data) - 3)),space_unit,prestr2,prestr,space_unit,str)
                                else
                                    data = string(identity(data),str)
                                end
                            else
                                data = string(identity(data),space_unit,str)
                            end
                        else # x空格>y ; xxx>y
                            if prestr2 != space_unit # xxx>y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr,space_unit,str)
                                else
                                    data = string(identity(data),str)
                                end
                            else # x空格>y
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),space_unit,str)

                                else
                                    data = string(identity(data),str)
                                end
                            end
                        end
                    end
                elseif in(prestr,[" "])
                    data = string(identity(data),str)
                else # xxxxy _format("aaaaa .< y")
                    data = string(identity(data),str)
                end
            end
        else # str 为“=”
            continue;
        end
    end
    return data;
end

function _space(strs::String) #
    data ="";
    len = length(strs)
    strDict = Dict("\""=>0,"\'"=>0)
    for i = 1:len
        #println("_space: $i")
        str = stringindex(strs,i)
        if in(str,["\"","\'"])
            strDict[str] = identity(strDict[str]) + 1;
            data = string(identity(data),str)
        else
            sumnum = sum(values(strDict));
            if rem(sumnum,2)  == 0 # 偶数
                if str  == space_unit # " "
                    if i  == 1
                        continue;
                    else
                        prestr = stringindex(strs,i - 1)
                        if prestr  == space_unit
                            continue;
                        else
                            if prestr=="(" #(空格
                                continue;
                            else
                                data = string(identity(data),str)
                            end
                        end
                    end
                elseif str==")"
                    if i  == 1
                        data = strs;
                        break;
                    else
                        prestr = stringindex(strs,i - 1)
                        if prestr  == space_unit
                            data = string(identity(stringindex(data,1,length(data) - 1)),str)
                        else
                            data = string(identity(data),str);
                        end
                    end
                elseif str=="&" # 第一次  &, 第二次  & ; #&&
                    if i  == 1
                        data = strs;
                        break;
                    elseif i  == 2
                        prestr = stringindex(strs,i - 1)
                        if prestr  == space_unit && prestr =="&"
                            data = string(identity(data),str);
                        else
                            data = string(identity(data)," ",str);
                        end
                    else
                        prestr = stringindex(strs,i - 1)
                        prestr2 = stringindex(strs,i - 2)
                        # && reutrn; && return && return =>前中后
                        if prestr =="&"
                            if prestr2  == space_unit
                                if i < len
                                    prostr = stringindex(strs,i + 1);
                                    if prostr != space_unit
                                        data = string(identity(data),str,space_unit);
                                    else
                                        data = string(identity(data),str);
                                    end
                                else
                                    data = string(identity(data),str);
                                end
                            else
                                if i < len
                                    prostr = stringindex(strs,i + 1);
                                    if prostr != space_unit
                                        data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 1,i),space_unit);
                                    else
                                        data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 1,i));
                                    end
                                else
                                    data = string(identity(stringindex(data,1,length(data) - 2)),space_unit,stringindex(strs,i - 1,i));
                                end
                            end
                        else # !="&"
                            if prestr2  == space_unit
                                data = string(identity(data),str);
                            elseif prestr2 != space_unit
                                data = string(identity(data),space_unit,str);
                            end
                        end
                    end
                elseif str=="\\"
                    data = string(identity(data),stringindex(strs,i,len))
                    break;
                elseif str =="#"
                    data = string(identity(data),stringindex(strs,i,len))
                    break;
                else # x =y
                    data = string(identity(data),str)
                end
            else
                data = string(identity(data),str);
            end
        end
    end
    return data;
end
function _tab(strs::String) # 删除代码中的制表符
    len =length(strs)
    data ="";
    ishead =true;
    for i =1:len
        str =stringindex(strs,i)
        if !in(str,["\t"," "])
            if ishead
                data = string(identity(data),stringindex(strs,i,len))
            end
            ishead =false;
        end
    end
    return data
end
function _add_subtract_multiply_divide(strs::String) # 加减乘除
    # 处理其中的加减乘除
    data ="";
    len = length(strs)
    strDict = Dict("\""=>0,"\'"=>0)
    # 思路:第一个\判断,连带处理后面的\,;第二外\不做处理。
    for i = 1:len
        #println("_space: $i")
        str = stringindex(strs,i)
        if in(str,["\\","#"])
            data = string(identity(data),stringindex(strs,i,len))
            break;
        elseif in(str,["\"","\'"])
            strDict[str] = identity(strDict[str]) + 1;
            data = string(identity(data),str)
        elseif in(str,["/"]) #
            sumnum = sum(values(strDict));
            if i  == 1
                if i  == len
                    data = identity(str);
                else
                    str2 = stringindex(strs,i + 1)
                    if str2 =="/"
                        str3 = stringindex(strs,i + 2)
                        if str3  == space_unit
                            data = string(str,str2)
                        else
                            if rem(sumnum,2)  == 0
                                data = string(str,str2,space_unit)
                            else
                                data = string(str,str2)
                            end
                        end
                    elseif str2 != space_unit
                        if rem(sumnum,2)  == 0
                            data = string(str,space_unit)
                        else
                            data = str;
                        end
                    else
                        data = identity(str);
                    end
                end
            else
                prestr = stringindex(strs,i - 1)
                if prestr=="/"#
                    continue;
                elseif prestr  == space_unit # 空格 // ;空格 / ;
                    if i  == len
                        data = string(identity(data),str)
                    else
                        str2 = stringindex(strs,i + 1);
                        if str2 =="/"
                            if i + 1  == len
                                data = string(identity(data),str,str2)
                            else
                                str3 = stringindex(strs,i + 2)
                                if str3  == space_unit
                                    data = string(identity(data),str,str2)
                                else
                                    if rem(sumnum,2)  == 0
                                        data = string(identity(data),str,str2,space_unit)
                                    else
                                        data = string(identity(data),str,str2)
                                    end
                                end
                            end
                        elseif str2  == space_unit
                            data = string(identity(data),str)
                        else
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),str,space_unit)
                            else
                                data = string(identity(data),str)
                            end
                        end
                    end
                elseif prestr  == "." #
                    if i ==len
                        data = string(identity(data),str)
                    elseif  i==2
                        data = string(identity(data),stringindex(strs,i,len))
                        break;
                    else
                        str2 = stringindex(strs,i + 1);
                        prestr2=stringindex(strs,i - 2);
                        if str2 != space_unit #
                            if prestr2 != space_unit # a./b
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,i - 2)),space_unit,prestr,str,space_unit);
                                else
                                    data = string(identity(data),str);
                                end
                            else #a ./b;
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,i - 2)),prestr,str,space_unit);
                                else
                                    data = string(identity(data),str);
                                end
                            end
                        else # a ./空格
                            if prestr2 != space_unit #a./ 空格;
                                if rem(sumnum,2)  == 0
                                    data = string(identity(stringindex(data,1,i - 2)),space_unit,prestr,str);
                                else #\" a ./ b;
                                    data = string(data,str);
                                end
                            else ##\" a ./ b;
                                data = string(data,str);
                            end
                        end
                    end
                else# a / => / B
                    if i  == len
                        data = string(prestr,str)
                    else
                        str2 = stringindex(strs,i + 1)
                        if str2 =="/"
                            if i + 1  == len
                                continue;
                            else
                                str3 = stringindex(strs,i + 2);
                                if str3  == space_unit #
                                    if rem(sumnum,2)  == 0
                                        data = string(identity(data),space_unit,str,str2)
                                    else
                                        data = string(identity(data),str,str2)
                                    end
                                else
                                    if rem(sumnum,2)  == 0
                                        data = string(identity(data),space_unit,str,str2,space_unit)
                                    else
                                        data = string(identity(data),str,str2)
                                    end
                                end
                            end
                        elseif str2  == space_unit
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),space_unit,str)
                            else
                                data = string(identity(data),str)
                            end
                        else
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),space_unit,str,space_unit)
                            else
                                data = string(identity(data),str)
                            end
                        end
                    end
                end
            end
        elseif in(str,["+","*","-"])
            sumnum = sum(values(strDict));
            if i  == 1
                if i  == len
                    data = identity(str);
                else
                    str2 = stringindex(strs,i + 1)
                    if str2 != space_unit
                        if rem(sumnum,2)  == 0
                            data = string(str,space_unit)
                        else
                            data = string(str)
                        end
                    else
                        data = identity(str);
                    end
                end
            elseif i  == 2
                prestr = stringindex(strs,i - 1);
                if i  == len
                    data = string(identity(data),str)
                else # A + B
                    str2 = stringindex(strs,i + 1)
                    if str2  == space_unit
                        data = string(identity(data),str)
                    # elseif str2=="/"
                    #     if i + 1  == len
                    #         if rem(sumnum,2)  == 0
                    #             data = string(prestr,space_unit,str,str2)
                    #         else
                    #             data = string(prestr,str,str2)
                    #         end
                    #     else
                    #         str3 = stringindex(strs,i + 2)
                    #         if str3 != space_unit
                    #             if rem(sumnum,2)  == 0
                    #                 data = string(prestr,space_unit,str,str2,space_unit)
                    #             else
                    #                 data = string(prestr,str,str2)
                    #             end
                    #         else
                    #             if rem(sumnum,2)  == 0
                    #                 data = string(prestr,space_unit,str,str2)
                    #             else
                    #                 data = string(prestr,str,str2)
                    #             end
                    #         end
                    #     end
                    else
                        if rem(sumnum,2)  == 0
                            if prestr =="/"
                                data = string(identity(data),str)
                            elseif prestr != space_unit
                                data = string(identity(data),space_unit,str,space_unit)
                            else
                                data = string(identity(data),str,space_unit)
                            end
                        else
                            data = string(identity(data),str)
                        end
                    end
                end
            else
                prestr = stringindex(strs,i - 1);
                prestr2 = stringindex(strs,i - 2);
                if i  == len
                    if prestr =="."
                        if prestr2 != space_unit # aaa.=
                            if rem(sumnum,2)  == 0
                                data = string(identity(stringindex(data,1,length(data) - 1)),space_unit,prestr,str)
                            else
                                data = string(identity(data),str)
                            end
                        else
                            data = string(identity(data),str)
                        end
                    else
                        if prestr2 != space_unit # a=
                            data = string(identity(data),space_unit,str)
                        else
                            data = string(identity(data),str)
                        end
                    end
                else #aa + b; .+ b; a空格 + b;a空格 .+ 空格
                    str2 = stringindex(strs,i + 1)
                    if prestr=="." #
                        if str2 != space_unit #
                            if prestr2 != space_unit # X*a.+b
                                if rem(sumnum,2)  == 0 # update 11/20
                                    data = string(identity(stringindex(data,1,length(data)-1)),space_unit,prestr,str,space_unit);
                                else # X*a .+b
                                    data = string(identity(data),str);
                                end
                            else ## X*a .+b
                                if rem(sumnum,2)  == 0
                                    data = string(identity(data),str,space_unit);
                                else
                                    data = string(identity(data),str);
                                end
                            end
                        else #
                            if prestr2 != space_unit # X*a.+ b
                                if rem(sumnum,2)  == 0 # update 11-20
                                    data = string(identity(stringindex(data,1,length(data)- 1)),space_unit,prestr,str);
                                else #\".+b;
                                    data = string(data,str);
                                end
                            else ## X*a .+ b
                                data = string(data,str);
                            end
                        end
                    elseif prestr  == space_unit # a空格 +
                        if str2 != space_unit # a空格 + A
                            if rem(sumnum,2)  == 0
                                data = string(identity(data),str,space_unit)
                            else
                                data = string(identity(data),str)
                            end
                        else
                            data = string(identity(data),str)
                        end
                    else # aaa + b; aaa + b
                        if str2 != space_unit
                            if rem(sumnum,2) == 0 # aaa + b;
                                data = string(identity(data),space_unit,str,space_unit)
                            else
                                data = string(identity(data),str)
                            end
                        else # aaa + b
                            if rem(sumnum,2) == 0
                                data = string(identity(data),space_unit,str)
                            else
                                data = string(identity(data),str)
                            end
                        end
                    end
                end
            end
        else
            data = string(identity(data),str)
        end
    end
    return data;
end
function isPreIndent_right(prestrs::Array{String})
    list_more = ["if" ,"else","elseif" ,"for" ,"while",
    "function", "type","immutable","macro","try","catch","finally"] #"module",
    stringindex(prestrs[1],1)=="#" && return false;
    for str in prestrs
        if in(str,list_more)
            #println("isPreIndent_right : $str")
            return true;
        end
    end
    return false
end
# && return, && return 二种情况的
function isPreIndent_left(prestrs::Array{String})
    list_less = ["return","break","continue"] # no end!
    stringindex(prestrs[1],1)=="#" && return false;
    flag = 0;
    for str in prestrs
        flag = flag + 1;
        if in(str,list_less)
            #println("isPreIndent_left : $str")
            flag  == 1 && return true;
            if flag != 1
                prestr = prestrs[flag - 1];
                if in(prestr,["&","&&"])
                    return false;
                end
            end
            return true;
        end
    end
    return false
end
function isCurrIndent_left(strs::Array{String})
    list_more = ["else","elseif" ,"end"]
    stringindex(strs[1],1)=="#" && return false;
    for str in strs
        if in(str,list_more)
            #println("isCurrIndent_left : $str")
            return true;
        end
    end
    return false
end

function getHeadSpaceNum(strs::String)
    len = length(strs)
    flag = 0
    for i = 1:len
        str = stringindex(strs,i)
        if str != space_unit
            break;
        else
            flag = flag + 1
        end
    end
    return flag
end

function writeScript(path::String,strs::String)
    #data=readlines(open(joinpath(path)))
    io = open(path,"w+")
    write(io,strs)
    close(io)
end

function writeScript(path::String,data::Array{String})
    io = open(path,"w+");
    for strs in data
        write(io,strs)
    end
    close(io);
end


end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值