zoukankan      html  css  js  c++  java
  • 总结实习经历,为以后面试准备

    在2013年6月至2013年12月底,我在上海冠信电子系统有限公司(上海图元软件公司)实习,期间有一定收获,现在记录下来,以备将来面试之用。

    1,流程图 

     

    左右滑动track和view会触发2个事件,栅格缩放会触发一个事件,扫视和缩放也会触发一个事件。

     private void tsiZoomTrack_ValueChanged(object sender, EventArgs e)
            {
                int ratio100 = TrackValueConvertToRatio(this.tsiZoomTrack.Value);
                this.tsiZoomRatio.Text = string.Format("{0,3}%", ratio100);
                InitTsiZoomRatio();
                Get_CurrentZoomRatio(ratio100);
                if (this.overviewControl1.Diagram != null)
                    this.overviewControl1.Diagram.View.Magnification = (float)ratio100;
            }
    
            private void tsiZoomView_Click(object sender, EventArgs e)
            {
                if (!this.overViewControlPanel.Visible)
                {
                 
                    overViewControlPanel.Location = new Point(this.diagram1.Width - overViewControlPanel.Width, this.diagram1.Height - overViewControlPanel.Height);
                    overViewControlPanel.Show();
                }
                else
                {
                    overViewControlPanel.Hide();
                }
            }
    
            private void overviewControl1_ViewPortBoundsChanged(ViewPortBoundsChangedEventArgs evtArgs)
            {
                int newValue = RatioConvertToTrackValue((int)this.overviewControl1.Diagram.View.Magnification);
                if (newValue != this.tsiZoomTrack.Value)
                {
                    this.tsiZoomTrack.Value = newValue;
                }
            }
    
            private void diagram1_SizeChanged(object sender, EventArgs e)
            {
                overViewControlPanel.Location = new Point(this.diagram1.Width - overViewControlPanel.Width, this.diagram1.Height - overViewControlPanel.Height);
            }
    View Code

      zoomtrack和zoomview之间有转换的关系如下:

          private int RatioConvertToTrackValue(int ratio100)
            {
                if (ratio100 < 100)
                    //return (int)(((ratio100 * 4F - 400) / 10) + 0.5);
                    if (((ratio100 * 4F - 400) / 10) > ((int)(ratio100 * 4F - 400) / 10) - 0.5)
                    {
                        return (int)((ratio100 * 4F - 400) / 10);
                    }
                    else
                    {
                        return (int)((ratio100 * 4F - 400) / 10) - 1;
                    }
                else
                    return (int)(((ratio100 * 2F - 200) / 10) + 0.5);
            }
            private int TrackValueConvertToRatio(int trackValue)
            {
                if (trackValue < 0)
                    return (int)(100 + (int)(trackValue * 25) / 10);
                else
                    return (int)(100 + (int)(trackValue * 50) / 10);
            }
    View Code

    2,智能编辑器

    本智能编辑器能够实现高亮显示,智能提示和对函数重载的处理。主要是利用三方库进行字符串处理。

    同时我们需要使用xml文件来定义字符串的高亮处理。

    <?xml version="1.0" encoding="utf-8"?>
    <ArrayOfConfigLanguage>
      <ConfigLanguage name="verilog" StartComment="//" TriggersActivators=" ;.=()">
        <formats>
          <!--<format name="class" Font="Courier New, 10pt" FontColor="Black" />-->
          <format name="Text" Font="Courier New, 10pt" FontColor="Black" />
          <format name="Whitespace" Font="Courier New, 10pt" FontColor="Black" />
          <format name="KeyWord" Font="Courier New, 10pt" FontColor="Blue" />
          <format name="ImageProcessor" Font="Courier New, 10pt" FontColor="Blue" UseCustomControl="true" />
          <format name="String" Font="Courier New, 10pt, style=Bold" FontColor="Red" BorderColor="Red" />
          <format name="Number" Font="Courier New, 10pt, style=Bold" FontColor="Navy" />
          <format name="Error" Font="Courier New, 10pt" FontColor="Black" underline="Wave" LineColor="Red" />
          <format name="Operator" Font="Courier New, 10pt" FontColor="Black" />
          <format name="Comment" Font="Courier New, 10pt, style=Bold" FontColor="Green" />
          <format name="PreprocessorKeyword" Font="Courier New, 10pt" FontColor="Gray" />
          <format name="SelectedText" Font="Courier New, 10pt" BackColor="Highlight" FontColor="HighlightText" />
          <format name="CommentXML" Font="Courier New, 10pt, style=Bold" FontColor="Gray" />
          <format name="CollapsedText" Font="Courier New, 10pt" FontColor="Black" BorderColor="Gray" BorderStyle="Solid" />
        </formats>
        <extensions>
          <extension>va</extension>
        </extensions>
        <lexems>
          <lexem BeginBlock="&gt;" Type="Operator" />
          <lexem BeginBlock="#" Type="Operator" />
          <lexem BeginBlock="=" Type="Operator" />
          <lexem BeginBlock="+" Type="Operator" />
          <lexem BeginBlock="-" Type="Operator" />
          <lexem BeginBlock="/" Type="Operator" />
          <lexem BeginBlock="*" Type="Operator" />
          <lexem BeginBlock="!=" Type="Operator" />
          <lexem BeginBlock="==" Type="Operator" />
          <lexem BeginBlock="-=" Type="Operator" />
          <lexem BeginBlock="+=" Type="Operator" />
          <lexem BeginBlock="=-" Type="Operator" />
          <lexem BeginBlock="=+" Type="Operator" />
          <lexem BeginBlock="*=" Type="Operator" />
          <lexem BeginBlock="/=" Type="Operator" />
          <lexem BeginBlock="=*" Type="Operator" />
          <lexem BeginBlock="=/" Type="Operator" />
          <lexem BeginBlock="++" Type="Operator" />
          <lexem BeginBlock="--" Type="Operator" />
          <lexem BeginBlock=";" Type="Operator" />
          <lexem BeginBlock=":" Type="Operator" />
          <lexem BeginBlock="." Type="Operator" DropContextChoiceList="true" />
          <lexem BeginBlock="," Type="Operator" />
          <lexem BeginBlock="*/" Type="Error" Priority="-10" />
          <lexem BeginBlock="/*" EndBlock="*/" Type="Comment" OnlyLocalSublexems="true" IsComplex="true" IsCollapsable="true" CollapseName="/*...*/" AllowTriggers="false">
            <SubLexems>
              <lexem BeginBlock="/*" Type="Comment" />
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock=")" Type="Error" Priority="-10" />
          <lexem BeginBlock="(" EndBlock=")" Type="Operator" IsComplex="true" IsCollapsable="false"  DropContextPrompt="true" CollapseName="(...)">
            <SubLexems>
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="&quot;" EndBlock="(&quot;)|(@&quot;)" Type="String" IsEndRegex="true" IsComplex="true" OnlyLocalSublexems="true" IndentationGuideline="true">
            <SubLexems>
              <lexem BeginBlock="" EndBlock="&quot;" Type="String" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="'" EndBlock="'" Type="String" IsComplex="true" OnlyLocalSublexems="true">
            <SubLexems>
              <lexem BeginBlock="" EndBlock=".+" IsEndRegex="true" Priority="2" Type="String" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="@&quot;" EndBlock="(&quot;)|(@&quot;)" Type="String" IsEndRegex="true" OnlyLocalSublexems="true" IsComplex="true">
            <SubLexems>
              <lexem BeginBlock="
    " IsBeginRegex="true" />
              <lexem BeginBlock="&quot;" EndBlock="&quot;" Type="String" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="[" EndBlock="]" Type="Operator" IsComplex="true" IsCollapsable="false"  DropContextPrompt="true" CollapseName="[...]">
            <SubLexems>
              <lexem BeginBlock="" EndBlock="&quot;" Type="String" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="//" EndBlock="
    " IsEndRegex="true" Type="Comment" IsComplex="true" OnlyLocalSublexems="true" AllowTriggers="false" />
          <lexem ID="1041" EndBlock="#endregion" Type="PreprocessorKeyword" IsComplex="true" IsCollapsable="true">
            <SubLexems>
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="#endregion" Type="Error" Priority="-10" />
          <lexem BeginBlock="#endif" Type="Error" Priority="-10" />
          <lexem BeginBlock="#else" Type="Error" Priority="-10" />
          <lexem ID="1044" EndBlock="#endif" Type="PreprocessorKeyword" IsComplex="true">
            <SubLexems>
              <lexem BeginBlock="#else" Type="PreprocessorKeyword" />
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="#region" EndBlock="
    " Type="PreprocessorKeyword" IsEndRegex="true" OnlyLocalSublexems="true" IsComplex="true" IsCollapsable="true" AutoNameExpression="(#region)s*(?&lt;text&gt;.*).*(?&lt;!
    )
    " AutoNameTemplate="${text}" IsCollapseAutoNamed="true" CollapseName="Unnamed Region" NextID="1041" IndentationGuideline="true">
            <SubLexems>
              <lexem BeginBlock=".*(?&lt;!
    )" IsBeginRegex="true" Type="Text" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="#if" EndBlock="
    " Type="PreprocessorKeyword" IsEndRegex="true" OnlyLocalSublexems="true" IsComplex="true" IsCollapsable="true" AutoNameExpression="(#if)s*(?&lt;text&gt;.*).*(?&lt;!
    )
    " AutoNameTemplate="If ${text}" IsCollapseAutoNamed="true" CollapseName="Incorrect if-def" NextID="1044">
            <SubLexems>
              <lexem BeginBlock=".*(?&lt;!
    )" IsBeginRegex="true" Type="Text" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="(s(?&lt;!
    ))+" IsBeginRegex="true" Type="Whitespace" />
          <lexem ID="1" EndBlock="param>" Type="Comment" IsComplex="true" IsEndRegex="true" IsCollapsable="true">
            <SubLexems>
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="/// " EndBlock="
    "  Type="Comment" OnlyLocalSublexems="true" IsComplex="true" AllowTriggers="false" NextID="1">
            <SubLexems>
              <lexem BeginBlock="&lt;" EndBlock="&gt;" Type="Comment" FormatName="CommentXML" IsComplex="true" OnlyLocalSublexems="true" IndentationGuideline="true" />
            </SubLexems>
          </lexem>
          <!--<lexem BeginBlock="///" EndBlock="///&lt;p" Type="Comment" IsEndRegex="true"
           IsComplex="true" IsCollapsable="true" AutoNameExpression="s*(?&lt;text>.*).*
    " AutoNameTemplate="${text} "
           IsCollapseAutoNamed="true" CollapseName="#Region">
            <SubLexems>
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>-->
          <lexem ID="1124" BeginBlock="[0-9]+" EndBlock=".*" IsPseudoEnd="true" IsEndRegex="true" IsBeginRegex="true" Type="Number" IsComplex="true" OnlyLocalSublexems="true">
            <SubLexems>
              <lexem BeginBlock="x" EndBlock="[0-9a-fA-F]+" IsEndRegex="true" Type="Number" Priority="5" />
              <lexem BeginBlock="." EndBlock="[0-9]+" IsEndRegex="true" Type="Number" Priority="5" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="}" Type="Error" Priority="-10" /><!--Type="KeyWord"-->
          <lexem ID="256" BeginBlock="{" EndBlock="}"  IsComplex="true" IsCollapsable="true"  DropContextPrompt="true" Indent="true" CollapseName="{...}" IndentationGuideline="true" AutoFormatStartNewLine="true">
            <SubLexems>
              <lexem BeginBlock="
    " IsBeginRegex="true" />
            </SubLexems>
          </lexem>
          <lexem BeginBlock="alias" Type="KeyWord" />
          <lexem BeginBlock="always" Type="KeyWord" />
          <lexem BeginBlock="always_comb" Type="KeyWord" />
          <lexem BeginBlock="always_ff" Type="KeyWord" />
          <lexem BeginBlock="always_latch" Type="KeyWord" />
          <lexem BeginBlock="and" Type="KeyWord" />
          <lexem BeginBlock="assert" Type="KeyWord" />
          <lexem BeginBlock="assign" Type="KeyWord" />
          <lexem BeginBlock="assume" Type="KeyWord" />
          <lexem BeginBlock="automatic" Type="KeyWord" />
          <lexem BeginBlock="before" Type="KeyWord" />
          <lexem BeginBlock="begin" Type="KeyWord" />
          <lexem BeginBlock="bind" Type="KeyWord" />
          <lexem BeginBlock="bins" Type="KeyWord" />
          <lexem BeginBlock="binsof" Type="KeyWord" />
          <lexem BeginBlock="bit" Type="KeyWord" />
          <lexem BeginBlock="break" Type="KeyWord" />
          <lexem BeginBlock="buf" Type="KeyWord" />
          <lexem BeginBlock="bufif0" Type="KeyWord" />
          <lexem BeginBlock="bufif1" Type="KeyWord" />
          <lexem BeginBlock="byte" Type="KeyWord" />
          <lexem BeginBlock="case" Type="KeyWord" />
          <lexem BeginBlock="casex" Type="KeyWord" />
          <lexem BeginBlock="cell" Type="KeyWord" />
          <lexem BeginBlock="chandle" Type="KeyWord" />
          <lexem BeginBlock="class" Type="KeyWord" />
          <lexem BeginBlock="clocking" Type="KeyWord" />
          <lexem BeginBlock="cmos" Type="KeyWord" />
          <lexem BeginBlock="config" Type="KeyWord" />
          <lexem BeginBlock="const" Type="KeyWord" />
          <lexem BeginBlock="constraint" Type="KeyWord" />
          <lexem BeginBlock="context" Type="KeyWord" />
          <lexem BeginBlock="continue" Type="KeyWord" />
          <lexem BeginBlock="cover" Type="KeyWord" />
          <lexem BeginBlock="covergroup" Type="KeyWord" />
          <lexem BeginBlock="coverpoint" Type="KeyWord" />
          <lexem BeginBlock="cross" Type="KeyWord" />
          <lexem BeginBlock="deassign" Type="KeyWord" />
          <lexem BeginBlock="default" Type="KeyWord" />
          <lexem BeginBlock="defparam" Type="KeyWord" />
          <lexem BeginBlock="design" Type="KeyWord" />
          <lexem BeginBlock="disable" Type="KeyWord" />
          <lexem BeginBlock="dist" Type="KeyWord" />
          <lexem BeginBlock="do" Type="KeyWord" />
          <lexem BeginBlock="edge" Type="KeyWord" />
          <lexem BeginBlock="else" Type="KeyWord" />
          <lexem BeginBlock="endtable" Type="KeyWord" />
          <lexem BeginBlock="end" Type="KeyWord" />
          <lexem BeginBlock="endclass" Type="KeyWord" />
          <lexem BeginBlock="endspecify" Type="KeyWord" />
          <lexem BeginBlock="endcase" Type="KeyWord" />
          <lexem BeginBlock="endclocking" Type="KeyWord" />
          <lexem BeginBlock="endconfig" Type="KeyWord" />
          <lexem BeginBlock="endfunction" Type="KeyWord" />
          <lexem BeginBlock="endgenerate" Type="KeyWord" />
          <lexem BeginBlock="else" Type="KeyWord" />
          <lexem BeginBlock="endgroup" Type="KeyWord" />
          <lexem BeginBlock="endinterface" Type="KeyWord" />
          <lexem BeginBlock="endmodule" Type="KeyWord" />
          <lexem BeginBlock="endpackage" Type="KeyWord" />
          <lexem BeginBlock="endprimitive" Type="KeyWord" />
          <lexem BeginBlock="endprogram" Type="KeyWord" />
          <lexem BeginBlock="endproperty" Type="KeyWord" />
          <lexem BeginBlock="endspecify" Type="KeyWord" />
          <lexem BeginBlock="endsequence" Type="KeyWord" />
          <lexem BeginBlock="endtask" Type="KeyWord" />
          <lexem BeginBlock="enum" Type="KeyWord" />
          <lexem BeginBlock="event" Type="KeyWord" />
          <lexem BeginBlock="expect" Type="KeyWord" />
          <lexem BeginBlock="export" Type="KeyWord" />
          <lexem BeginBlock="extends" Type="KeyWord" />
          <lexem BeginBlock="extern" Type="KeyWord" />
          <lexem BeginBlock="final" Type="KeyWord" />
          <lexem BeginBlock="first_match" Type="KeyWord" />
          <lexem BeginBlock="for" Type="KeyWord" />
          <lexem BeginBlock="force" Type="KeyWord" />
          <lexem BeginBlock="foreach" Type="KeyWord" />
          <lexem BeginBlock="forever" Type="KeyWord" />
          <lexem BeginBlock="fork" Type="KeyWord" />
          <lexem BeginBlock="forkjoin" Type="KeyWord" />
          <lexem BeginBlock="function" Type="KeyWord" />
          <lexem BeginBlock="generate" Type="KeyWord" />
          <lexem BeginBlock="genvar" Type="KeyWord" />
          <lexem BeginBlock="highz0" Type="KeyWord" />
          <lexem BeginBlock="highz1" Type="KeyWord" />
          <lexem BeginBlock="if" Type="KeyWord" />
          <lexem BeginBlock="iff" Type="KeyWord" />
          <lexem BeginBlock="ifnone" Type="KeyWord" />
          <lexem BeginBlock="ignore_bins" Type="KeyWord" />
          <lexem BeginBlock="illegal_bins" Type="KeyWord" />
          <lexem BeginBlock="import" Type="KeyWord" />
          <lexem BeginBlock="incdir" Type="KeyWord" />
          <lexem BeginBlock="include" Type="KeyWord" />
          <lexem BeginBlock="initial" Type="KeyWord" />
          <lexem BeginBlock="input" Type="KeyWord" />
          <lexem BeginBlock="inout" Type="KeyWord" />
          <lexem BeginBlock="inside" Type="KeyWord" />
          <lexem BeginBlock="instance" Type="KeyWord" />
          <lexem BeginBlock="int" Type="KeyWord" />
          <lexem BeginBlock="integer" Type="KeyWord" />
          <lexem BeginBlock="interface" Type="KeyWord" />
          <lexem BeginBlock="intersect" Type="KeyWord" />
          <lexem BeginBlock="join" Type="KeyWord" />
          <lexem BeginBlock="join_any" Type="KeyWord" />
          <lexem BeginBlock="join_none" Type="KeyWord" />
          <lexem BeginBlock="large" Type="KeyWord" />
          <lexem BeginBlock="liblist" Type="KeyWord" />
          <lexem BeginBlock="library" Type="KeyWord" />
          <lexem BeginBlock="local" Type="KeyWord" />
          <lexem BeginBlock="localparam" Type="KeyWord" />
          <lexem BeginBlock="logic" Type="KeyWord" />
          <lexem BeginBlock="longint" Type="KeyWord" />
          <lexem BeginBlock="macromodule" Type="KeyWord" />
          <lexem BeginBlock="matches" Type="KeyWord" />
          <lexem BeginBlock="medium" Type="KeyWord" />
          <lexem BeginBlock="modport" Type="KeyWord" />
          <lexem BeginBlock="module" Type="KeyWord" />
          <lexem BeginBlock="nand" Type="KeyWord" />
          <lexem BeginBlock="negedge" Type="KeyWord" />
          <lexem BeginBlock="new" Type="KeyWord" />
          <lexem BeginBlock="nmos" Type="KeyWord" />
          <lexem BeginBlock="nor" Type="KeyWord" />
          <lexem BeginBlock="noshowcancelled" Type="KeyWord" />
          <lexem BeginBlock="not" Type="KeyWord" />
          <lexem BeginBlock="notif0" Type="KeyWord" />
          <lexem BeginBlock="notif1" Type="KeyWord" />
          <lexem BeginBlock="null" Type="KeyWord" />
          <lexem BeginBlock="or" Type="KeyWord" />
          <lexem BeginBlock="out" Type="KeyWord" />
          <lexem BeginBlock="package" Type="KeyWord" />
          <lexem BeginBlock="packed" Type="KeyWord" />
          <lexem BeginBlock="parameter" Type="KeyWord" />
          <lexem BeginBlock="pmos" Type="KeyWord" />
          <lexem BeginBlock="posedge" Type="KeyWord" />
          <lexem BeginBlock="primitive" Type="KeyWord" />
          <lexem BeginBlock="priority" Type="KeyWord" />
          <lexem BeginBlock="program" Type="KeyWord" />
          <lexem BeginBlock="property" Type="KeyWord" />
          <lexem BeginBlock="protected" Type="KeyWord" />
          <lexem BeginBlock="pull0" Type="KeyWord" />
          <lexem BeginBlock="pull1" Type="KeyWord" />
          <lexem BeginBlock="pulldown" Type="KeyWord" />
          <lexem BeginBlock="pullup" Type="KeyWord" />
          <lexem BeginBlock="pulsestyle_onevent" Type="KeyWord" />
          <lexem BeginBlock="pulsestyle_ondetect" Type="KeyWord" />
          <lexem BeginBlock="pure" Type="KeyWord" />
          <lexem BeginBlock="rand" Type="KeyWord" />
          <lexem BeginBlock="randc" Type="KeyWord" />
          <lexem BeginBlock="randcase" Type="KeyWord" />
          <lexem BeginBlock="randsequence" Type="KeyWord" />
          <lexem BeginBlock="rcmos" Type="KeyWord" />
          <lexem BeginBlock="real" Type="KeyWord" />
          <lexem BeginBlock="realtime" Type="KeyWord" />
          <lexem BeginBlock="ref" Type="KeyWord" />
          <lexem BeginBlock="reg" Type="KeyWord" />
          <lexem BeginBlock="release" Type="KeyWord" />
          <lexem BeginBlock="repeat" Type="KeyWord" />
          <lexem BeginBlock="return" Type="KeyWord" />
          <lexem BeginBlock="rnmos" Type="KeyWord" />
          <lexem BeginBlock="rpmos" Type="KeyWord" />
          <lexem BeginBlock="rtran" Type="KeyWord" />
          <lexem BeginBlock="rtranif0" Type="KeyWord" />
          <lexem BeginBlock="rtranif1" Type="KeyWord" />
          <lexem BeginBlock="scalared" Type="KeyWord" />
          <lexem BeginBlock="sequence" Type="KeyWord" />
          <lexem BeginBlock="shortint" Type="KeyWord" />
          <lexem BeginBlock="shortreal" Type="KeyWord" />
          <lexem BeginBlock="showcancelled" Type="KeyWord" />
          <lexem BeginBlock="signed" Type="KeyWord" />
          <lexem BeginBlock="small" Type="KeyWord" />
          <lexem BeginBlock="solve" Type="KeyWord" />
          <lexem BeginBlock="specify" Type="KeyWord" />
          <lexem BeginBlock="specparm" Type="KeyWord" />
          <lexem BeginBlock="static" Type="KeyWord" />
          <lexem BeginBlock="string" Type="KeyWord" />
          <lexem BeginBlock="strong0" Type="KeyWord" />
          <lexem BeginBlock="strong1" Type="KeyWord" />
          <lexem BeginBlock="struct" Type="KeyWord" />
          <lexem BeginBlock="super" Type="KeyWord" />
          <lexem BeginBlock="supply0" Type="KeyWord" />
          <lexem BeginBlock="supply1" Type="KeyWord" />
          <lexem BeginBlock="table" Type="KeyWord" />
          <lexem BeginBlock="tagged" Type="KeyWord" />
          <lexem BeginBlock="task" Type="KeyWord" />
          <lexem BeginBlock="this" Type="KeyWord" />
          <lexem BeginBlock="throughout" Type="KeyWord" />
          <lexem BeginBlock="time" Type="KeyWord" />
          <lexem BeginBlock="timeprecision" Type="KeyWord" />
          <lexem BeginBlock="timeunit" Type="KeyWord" />
          <lexem BeginBlock="tran" Type="KeyWord" />
          <lexem BeginBlock="tranif0" Type="KeyWord" />
          <lexem BeginBlock="tranif1" Type="KeyWord" />
          <lexem BeginBlock="tri" Type="KeyWord" />
          <lexem BeginBlock="tri0" Type="KeyWord" />
          <lexem BeginBlock="tri1" Type="KeyWord" />
          <lexem BeginBlock="triand" Type="KeyWord" />
          <lexem BeginBlock="trior" Type="KeyWord" />
          <lexem BeginBlock="trireg" Type="KeyWord" />
          <lexem BeginBlock="type" Type="KeyWord" />
          <lexem BeginBlock="typedef" Type="KeyWord" />
          <lexem BeginBlock="union" Type="KeyWord" />
          <lexem BeginBlock="unique" Type="KeyWord" />
          <lexem BeginBlock="unsigned" Type="KeyWord" />
          <lexem BeginBlock="use" Type="KeyWord" />
          <lexem BeginBlock="var" Type="KeyWord" />
          <lexem BeginBlock="vectored" Type="KeyWord" />
          <lexem BeginBlock="virtual" Type="KeyWord" />
          <lexem BeginBlock="void" Type="KeyWord" />
          <lexem BeginBlock="wait" Type="KeyWord" />
          <lexem BeginBlock="wait_order" Type="KeyWord" />
          <lexem BeginBlock="wand" Type="KeyWord" />
          <lexem BeginBlock="weak0" Type="KeyWord" />
          <lexem BeginBlock="weak1" Type="KeyWord" />
          <lexem BeginBlock="while" Type="KeyWord" />
          <lexem BeginBlock="wildcard" Type="KeyWord" />
          <lexem BeginBlock="wire" Type="KeyWord" />
          <lexem BeginBlock="with" Type="KeyWord" />
          <lexem BeginBlock="within" Type="KeyWord" />
          <lexem BeginBlock="wor" Type="KeyWord" />
          <lexem BeginBlock="xnor" Type="KeyWord" />
          <lexem BeginBlock="xor" Type="KeyWord" />
        </lexems>
        <splits>
          <split>@"</split>
          <split>&lt;img</split>
          <split>/&gt;</split>
          <split>+=</split>
          <split>/=</split>
          <split>=/</split>
          <split>*=</split>
          <split>=*</split>
          <split>==</split>
          <split>!=</split>
          <split>=+</split>
          <split>-=</split>
          <split>++</split>
          <split>-=</split>
          <split>=-</split>
          <split>--</split>
          <split>/*</split>
          <split>*/</split>
          <split>//</split>
          <split>#if</split>
          <split>#endif</split>
          <split>#else</split>
          <split>#region</split>
          <split>#endregion</split>
          <split>///</split>
        </splits>
        <AutoReplaceTriggers>
          <AutoReplaceTrigger From="teh" To="the" />
          <AutoReplaceTrigger From="itn" To="int" />
        </AutoReplaceTriggers>
        <CodeSnippetsContainer>
          <CodeSnippetsContainer Name="Container 1">
            <CodeSnippetsContainer Name="Container11">
              <CodeSnippet Format="1.0.0">
                <Header>
                  <Title>lock</Title>
                  <Shortcut>lock</Shortcut>
                  <Description>Code snippet for lock statement</Description>
                  <Author>Microsoft Corporation</Author>
                  <SnippetTypes>
                    <SnippetType>Expansion</SnippetType>
                    <SnippetType>SurroundsWith</SnippetType>
                  </SnippetTypes>
                </Header>
                <Snippet>
                  <Declarations>
                    <Literal>
                      <ID>expression</ID>
                      <ToolTip>Expression to evaluate</ToolTip>
                      <Default>this</Default>
                    </Literal>
                  </Declarations>
                  <Code Language="csharp"><![CDATA[lock ($expression$)
        {
            $selected$ $end$
        }]]></Code>
                </Snippet>
              </CodeSnippet>
              <CodeSnippet Format="1.0.0">
                <Header>
                  <Title>namespace</Title>
                  <Shortcut>namespace</Shortcut>
                  <Description>Code snippet for namespace</Description>
                  <Author>Microsoft Corporation</Author>
                  <SnippetTypes>
                    <SnippetType>Expansion</SnippetType>
                    <SnippetType>SurroundsWith</SnippetType>
                  </SnippetTypes>
                </Header>
                <Snippet>
                  <Declarations>
                    <Literal>
                      <ID>name</ID>
                      <ToolTip>Namespace name</ToolTip>
                      <Default>MyNamespace</Default>
                    </Literal>
                  </Declarations>
                  <Code Language="csharp"><![CDATA[namespace $name$
        {
            $selected$ $end$
        }]]></Code>
                </Snippet>
              </CodeSnippet>
            </CodeSnippetsContainer>
            <CodeSnippet Format="1.0.0">
              <Header>
                <Title>for</Title>
                <Shortcut>for</Shortcut>
                <Description>Code snippet for 'for' loop</Description>
                <Author>Microsoft Corporation</Author>
                <SnippetTypes>
                  <SnippetType>Expansion</SnippetType>
                  <SnippetType>SurroundsWith</SnippetType>
                </SnippetTypes>
              </Header>
              <Snippet>
                <Declarations>
                  <Literal>
                    <ID>index</ID>
                    <ToolTip>Index</ToolTip>
                    <Default>i</Default>
                  </Literal>
                  <Literal>
                    <ID>max</ID>
                    <ToolTip>Max length</ToolTip>
                    <Default>length</Default>
                  </Literal>
                </Declarations>
                <Code Language="csharp"><![CDATA[for (int $index$ = 0; $index$ < $max$; $index$++)
                {
                $selected$ $end$
                }]]></Code>
              </Snippet>
            </CodeSnippet>
          </CodeSnippetsContainer>
          <CodeSnippetsContainer Name="Container 2">
            <CodeSnippet Format="1.0.0">
              <Header>
                <Title>struct</Title>
                <Shortcut>struct</Shortcut>
                <Description>Code snippet for struct</Description>
                <Author>Microsoft Corporation</Author>
                <SnippetTypes>
                  <SnippetType>Expansion</SnippetType>
                  <SnippetType>SurroundsWith</SnippetType>
                </SnippetTypes>
              </Header>
              <Snippet>
                <Declarations>
                  <Literal>
                    <ID>name</ID>
                    <ToolTip>Struct name</ToolTip>
                    <Default>MyStruct</Default>
                  </Literal>
                </Declarations>
                <Code Language="csharp"><![CDATA[struct $name$
        {
            $selected$$end$
        }]]></Code>
              </Snippet>
            </CodeSnippet>
          </CodeSnippetsContainer>
          <CodeSnippet Format="1.0.0">
            <Header>
              <Title>if</Title>
              <Shortcut>if</Shortcut>
              <Description>Code snippet for if statement</Description>
              <Author>Microsoft Corporation</Author>
              <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
                <SnippetType>SurroundsWith</SnippetType>
              </SnippetTypes>
            </Header>
            <Snippet>
              <Declarations>
                <Literal>
                  <ID>expression</ID>
                  <ToolTip>Expression to evaluate</ToolTip>
                  <Default>true</Default>
                </Literal>
              </Declarations>
              <Code Language="csharp"><![CDATA[if ($expression$)
        {
            $selected$ $end$
        }]]></Code>
            </Snippet>
          </CodeSnippet>
          <CodeSnippet Format="1.0.0">
            <Header>
              <Title>try</Title>
              <Shortcut>try</Shortcut>
              <Description>Code snippet for try catch</Description>
              <Author>Microsoft Corporation</Author>
              <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
                <SnippetType>SurroundsWith</SnippetType>
              </SnippetTypes>
            </Header>
            <Snippet>
              <Declarations>
                <Literal>
                  <ID>expression</ID>
                  <ToolTip>Exception type</ToolTip>
                </Literal>
              </Declarations>
              <Code Language="csharp"><![CDATA[try 
        {            
            $selected$
        }
        catch ($expression$)
        {
            $end$
            throw;
        }]]></Code>
            </Snippet>
          </CodeSnippet>
        </CodeSnippetsContainer>
      </ConfigLanguage>
    </ArrayOfConfigLanguage>
    View Code
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Xml;
    using System.IO;
    using Syncfusion.Windows.Forms.Edit;
    using Syncfusion.Windows.Forms.Edit.Enums;
    using Syncfusion.Windows.Forms.Edit.Utils.CodeSnippets;
    using Syncfusion.XmlSerializersCreator;
    using Syncfusion.Windows.Forms.Edit.Interfaces;
    using System.Data.SqlClient;
    using System.Collections.Generic;
    using System.Text;
    using System.Data.Sql;
    using System.Xml.Linq;
    using System.Xml.XPath;
    //using CodeSnippetsDemo.MyEvent;
    using Syncfusion.Windows.Forms.Edit.Implementation.Parser;
    using System.Linq;
    using System.Text.RegularExpressions;
    
    namespace CodeSnippetsDemo
    {
        public class Model
        {
            //private XElement root;
    
            //public XElement Root
            //{
            //    get { return root; }
            //    set { root = value; }
            //}
            private int lineComment;
    
            public int LineComment
            {
                get { return lineComment; }
                set { lineComment = value; }
            }
            private bool commentStart;
    
            public bool CommentStart
            {
                get { return commentStart; }
                set { commentStart = value; }
            }
            private Syncfusion.Windows.Forms.Edit.EditControl editControl1;
    
            public Syncfusion.Windows.Forms.Edit.EditControl EditControl1
            {
                get { return editControl1; }
                set { editControl1 = value; }
            }
            private static XElement root = new XElement("Root");
    
            public static XElement Root
            {
                get { return root; }
                set { root = value; }
            }
            private XElement currentNew;
    
            public XElement CurrentNew
            {
                get { return currentNew; }
                set { currentNew = value; }
            }
            private XElement currentCls;
    
            public XElement CurrentCls
            {
                get { return currentCls; }
                set { currentCls = value; }
            }
            private List<string> current = new List<string>();
            private List<string> previous = new List<string>();
            public void InitialText()
            {
                //this.editControl1.Invalidate();
                //this.editControl1.Update();
                //XmlDocument xmlDoc = new XmlDocument();
                //xmlDoc.Load("..\..\Verilog.xml");//加载xml文件,路径未指定时默认在当前项目环境下
    
                XElement currentParentNode = root;
                currentCls = null;
                //XElement currentChild = null;
                //root.Add(currentNew);
                //bool innerFuc = false;
                //bool innerClass = false;
                int lineID = 0;
                current.Clear();
                List<string> clsNames = new List<string>();
    
                foreach (string item in this.EditControl1.Lines)
                {
                    if (item.Contains("class "))
                    {
                        clsNames.Add(GetWordByLine(2, item.Trim()));
                    }
                }
                foreach (string item in this.EditControl1.Lines)
                {
    
                    ILexem lex;
                    ILexemLine lexemLine = this.EditControl1.GetLine(lineID + 1);
                    IList list = lexemLine.LineLexems;
                    //if (GetWordNumByLine(item) > 1)
                    foreach (object lexem in list)
                    {
                        lex = (ILexem)lexem;
                        if (lex.Config.Format.Name == "Text")
                        {
                            if (clsNames.Contains(lex.Text))
                            {
                                //lex.Config.Format.FontColor = Color.ForestGreen;
                                this.EditControl1.SetTextColor(new Point(lex.Column, lineID + 1), new Point(lex.Column + lex.Length, lineID + 1), Color.Brown);
                            }
                            else
                            {
                                this.EditControl1.SetTextColor(new Point(lex.Column, lineID + 1), new Point(lex.Column + lex.Length, lineID + 1), Color.Black);
                            }
                        }
                        else
                        {
                            this.EditControl1.SetTextColor(new Point(lex.Column, lineID + 1), new Point(lex.Column + lex.Length, lineID + 1), lex.Config.Format.FontColor);
                        }
                    }
                    lineID++;
                    switch (GetWordByLine(1, item))
                    {
                        case "class":
    
                            if (item.Trim().Contains(" "))
                            {
                                currentCls = new XElement(GetWordByLine(2, item.Trim()));
                                if (root.Descendants(GetWordByLine(2, item.Trim())).Count() <= 0)
                                {
                                    currentNew = new XElement(GetWordByLine(2, item.Trim()));
                                    current.Add(GetWordByLine(2, item.Trim()));
                                    XAttribute type = new XAttribute("Type", "class");
                                    XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                    currentNew.Add(type);
                                    currentNew.Add(lineNumber);
                                    root.Add(currentNew);
                                    currentParentNode = currentNew;
                                }
                            }
                            break;
                        case "struct":
                            if (item.Trim().Contains(" "))
                            {
                                currentNew = new XElement(GetWordByLine(2, item.Trim()));
                                current.Add(GetWordByLine(2, item.Trim()));
                                XAttribute type = new XAttribute("Type", "class");
                                XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                currentNew.Add(type);
                                currentNew.Add(lineNumber);
                                currentParentNode.Add(currentNew);
                                currentParentNode = currentNew;
                            }
                            break;
                        case "function":
    
                            if (GetWordNumByLine(item) > 2 && root.Element(currentCls.Name).Element(GetWordByLine(3, item.Trim())) != null && root.Element(currentCls.Name).Element(GetWordByLine(3, item.Trim())).Attribute("Name").Value != item.Trim()
                               || GetWordNumByLine(item) > 2 && root.Element(currentCls.Name).Element(GetWordByLine(3, item.Trim())) == null)
                            {
                                currentNew = new XElement(GetWordByLine(3, item));
                                XAttribute funName = new XAttribute("Name", item.Replace(';', ' ').Trim());
                                XAttribute funType = new XAttribute("Type", GetWordByLine(2, item));
                                XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                XAttribute category = new XAttribute("Category", "Method");
                                currentNew.Add(funName);
                                currentNew.Add(funType);
                                currentNew.Add(parentClass);
                                currentNew.Add(lineNumber);
                                currentNew.Add(category);
                                if (GetParameters(item).Count > 0)
                                {
                                    XAttribute para = new XAttribute("ParametersType", this.GetVirtualParametersType(GetParameters(item)));
                                    currentNew.Add(para);
                                }
                                else
                                {
                                    XAttribute para = new XAttribute("ParametersType", " ");
                                    currentNew.Add(para);
                                }
                                //形参的所有类型
                                if (GetParameters(item).Count > 0)
                                {
                                    XElement para = new XElement("Parameters");
                                    XAttribute paraCount = new XAttribute("ParaCount", GetParameters(item).Count);
                                    foreach (string paras in GetParameters(item))
                                    {
                                        string[] args;
                                        args = paras.Split(' ');
                                        if (args.Length == 3)
                                        {
                                            XElement parameter = new XElement("Parameter");
                                            XAttribute paraPreType = new XAttribute("PreType", args[0].Trim());
                                            XAttribute paraType = new XAttribute("Type", args[1].Trim());
                                            XAttribute paraName = new XAttribute("Name", args[2].Trim());
                                            parameter.Add(paraPreType);
                                            parameter.Add(paraType);
                                            parameter.Add(paraName);
                                            para.Add(parameter);
                                        }
                                        if (args.Length == 2)
                                        {
                                            XElement parameter = new XElement("Parameter");
                                            XAttribute paraType = new XAttribute("Type", args[0].Trim());
                                            XAttribute paraName = new XAttribute("Name", args[1].Trim());
                                            parameter.Add(paraType);
                                            parameter.Add(paraName);
                                            para.Add(parameter);
                                        }
                                    }
                                    para.Add(paraCount);
                                    currentNew.Add(para);
                                }
                                else
                                {
                                    XElement para = new XElement("Parameters");
                                    currentNew.Add(para);
                                }
                                //ovreride
                                int lexems = GetWordNumByLine(item);
                                OverRideMethod(currentParentNode, currentCls, item, lexems);
                               // currentParentNode = currentNew;
                            }
                            //}
                            else if (GetWordNumByLine(item) < 3 && GetWordNumByLine(item) > 1 && root.Element(currentCls.Name).Element(GetWordByLine(2, item.Trim())) != null
                                && root.Element(currentCls.Name).Element(GetWordByLine(2, item.Trim())).Attribute("Name").Value != item.Trim()
                               || GetWordNumByLine(item) < 3 && GetWordNumByLine(item) > 1 && root.Element(currentCls.Name).Element(GetWordByLine(2, item.Trim())) == null)
                            {
                                currentNew = new XElement(GetWordByLine(2, item));
                                XAttribute funName = new XAttribute("Name", item.Replace(';', ' ').Trim());
                                XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                XAttribute category = new XAttribute("Category", "Method");
                                currentNew.Add(funName);
                                currentNew.Add(parentClass);
                                currentNew.Add(lineNumber);
                                currentNew.Add(category);
                                if (GetParameters(item).Count > 0)
                                {
                                    XAttribute para = new XAttribute("ParametersType", this.GetVirtualParametersType(GetParameters(item)));
                                    currentNew.Add(para);
                                }
                                else
                                {
                                    XAttribute para = new XAttribute("ParametersType", " ");
                                    currentNew.Add(para);
                                }
                                if (GetParameters(item).Count > 0)
                                {
                                    XElement para = new XElement("Parameters");
                                    XAttribute paraCount = new XAttribute("ParaCount", GetParameters(item).Count);
                                    foreach (string paras in GetParameters(item))
                                    {
                                        string[] args;
                                        args = paras.Split(' ');
                                        if (args.Length == 3)
                                        {
                                            XElement parameter = new XElement("Parameter");
                                            XAttribute paraPreType = new XAttribute("PreType", args[0].Trim());
                                            XAttribute paraType = new XAttribute("Type", args[1].Trim());
                                            XAttribute paraName = new XAttribute("Name", args[2].Trim());
                                            parameter.Add(paraPreType);
                                            parameter.Add(paraType);
                                            parameter.Add(paraName);
                                            para.Add(parameter);
                                        }
                                        if (args.Length == 2)
                                        {
                                            XElement parameter = new XElement("Parameter");
                                            XAttribute paraType = new XAttribute("Type", args[0].Trim());
                                            XAttribute paraName = new XAttribute("Name", args[1].Trim());
                                            parameter.Add(paraType);
                                            parameter.Add(paraName);
                                            para.Add(parameter);
                                        }
                                    }
                                    para.Add(paraCount);
                                    //currentNew.Add(para);
                                }
                                else
                                {
                                    XElement para = new XElement("Parameters");
                                    currentNew.Add(para);
                                }
                                int lexems = GetWordNumByLine(item);
                                if (item.Contains("new"))
                                {
                                    if (root.Element(currentCls.Name).Element(GetWordByLine(2, item)) != null)
                                    {
    
                                    }
                                    else
                                    {
                                        currentParentNode.Add(currentNew);
                                    }
    
                                }
                                else
                                {
                                    OverRideMethod(currentParentNode, currentCls, item, lexems);
                                }
                                //currentParentNode.Add(currentNew);
                                 //currentParentNode = currentNew;
                            }
                            break;
                        case "module":
    
                            break;
                        case "task":
                            if (GetWordNumByLine(item) < 3 && GetWordNumByLine(item) > 1 && root.Descendants(GetWordByLine(2, item.Trim())).Count() <= 0)
                            {
                                currentNew = new XElement(GetWordByLine(2, item));
                                XAttribute funName = new XAttribute("Name", item.Replace(';', ' ').Trim());
                                XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Parent.Name);
                                XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                XAttribute category = new XAttribute("Category", "Method");
                                currentNew.Add(funName);
                                currentNew.Add(parentClass);
                                currentNew.Add(lineNumber);
                                currentNew.Add(category);
                                if (GetParameters(item).Count > 0)
                                {
                                    XElement para = new XElement("Parameters");
                                    XAttribute paraCount = new XAttribute("ParaCount", GetParameters(item).Count);
                                    foreach (string paras in GetParameters(item))
                                    {
                                        string[] args;
                                        args = paras.Split(' ');
                                        if (args.Length == 3)
                                        {
                                            XElement parameter = new XElement("Parameter");
                                            XAttribute paraPreType = new XAttribute("PreType", args[0].Trim());
                                            XAttribute paraType = new XAttribute("Type", args[1].Trim());
                                            XAttribute paraName = new XAttribute("Name", args[2].Trim());
                                            parameter.Add(paraPreType);
                                            parameter.Add(paraType);
                                            parameter.Add(paraName);
                                            para.Add(parameter);
                                        }
                                        if (args.Length == 2)
                                        {
                                            XElement parameter = new XElement("Parameter");
                                            XAttribute paraType = new XAttribute("Type", args[0].Trim());
                                            XAttribute paraName = new XAttribute("Name", args[1].Trim());
                                            parameter.Add(paraType);
                                            parameter.Add(paraName);
                                            para.Add(parameter);
                                        }
                                    }
                                    para.Add(paraCount);
                                    currentNew.Add(para);
                                }
                                else
                                {
                                    XElement para = new XElement("Parameters");
                                    currentNew.Add(para);
                                }
                                currentParentNode.Add(currentNew);
                                //currentParentNode = currentNew;
                            }
                            break;
                        case "table":
    
                            break;
                        case "package":
    
                            break;
                        case "generate":
    
                            break;
                        case "config":
    
                            break;
                        case "clocking":
    
                            break;
                        case "endclass":
                            //if (currentNew != null)
                            //    currentParentNode = currentNew.Parent.Parent;
                            break;
                        case "endfunction":
                            //currentParentNode = currentNew.Parent;
                            break;
                        case "endtask":
                            //currentParentNode = currentNew.Parent;
                            break;
                        case "///":
                            //TODO:很多问题
                            if (string.IsNullOrEmpty(item.Replace('/', ' ').Trim()))
                            {
                                lineComment = this.editControl1.CurrentLine;
                                commentStart = true;
                            }
                            if (this.editControl1.CurrentLineText.Length > 2 && this.editControl1.CurrentLineText == item)
                            {
                                string thisline = this.editControl1.Lines[this.editControl1.CurrentLine - 1];
                                string commentValue = thisline.Replace('/', ' ').Trim();
                                if (!string.IsNullOrEmpty(commentValue) && commentValue != "<summary>")
                                {
    
                                    if (xel.Element("Comment") == null)
                                    {
                                        XElement xelComment = new XElement("Comment");
    
                                        XAttribute xattName = new XAttribute("CommentValue", commentValue);
                                        XAttribute xattType = new XAttribute("Type", xelComment.Name);
                                        XAttribute xattLine = new XAttribute("lineNum", this.editControl1.CurrentLine);
                                        xelComment.Add(xattName);
                                        xelComment.Add(xattType);
                                        xelComment.Add(xattLine);
                                        xel.Add(xelComment);
    
                                        root.Element(xel.Name).Add(xel);
    
                                        currentParentNode.Add(xel);
                                        //currentParentNode = currentNew;
                                    }
                                    else
                                    {
                                        xel.Element("Comment").Remove();
                                        if (root.Descendants("current_status").Count() >= 1)
                                        {
                                            //root.Element("Packet").Element(xel.Name).Element("Comment").Remove();
    
                                            XElement xelComment = new XElement("Comment");
    
                                            XAttribute xattName = new XAttribute("CommentValue", commentValue);
                                            XAttribute xattType = new XAttribute("Type", xelComment.Name);
                                            XAttribute xattLine = new XAttribute("lineNum", this.editControl1.CurrentLine);
                                            xelComment.Add(xattName);
                                            xelComment.Add(xattType);
                                            xelComment.Add(xattLine);
                                            xel.Add(xelComment);
                                            if (root.Element(currentCls.Name).Element(xel.Name) != null )
                                            {
                                                if (root.Element(currentCls.Name).Elements(xel.Name).Count() >= 0)
                                                {
                                                    IEnumerable<XElement> elements = root.Element(currentCls.Name).Elements(xel.Name);
                                                    foreach (var element in elements)
                                                    {
                                                        if (element.Attribute("ParametersType").Value == xel.Attribute("ParametersType").Value)
                                                        {
                                                            element.Remove();
                                                            root.Element(currentCls.Name).Add(xel);
                                                        }
                                                    }
                                                }
                                                
                                            }
                                            else
                                            {
                                                root.Element(currentCls.Name).Element(xel.Name).Add(xel);
                                            }
                                        }
                                        //currentParentNode.Add(xel);
                                        //currentParentNode = currentNew;
                                    }
                                }
                            }
    
                            break;
    
                        default:
                            string fieldName = null;
                            string subcomment = null;
                            if (item.Contains("["))
                            {
                                fieldName = GetWordByLine(3, item.Trim()).Trim();
                            }
                            else
                            {
                                fieldName = GetWordByLine(2, item.Trim()).Trim();
    
                            }
                            if (item.Contains("//"))
                            {
                                subcomment = item.Substring(0, item.Trim().IndexOf("//"));
                            }
                            // if (fieldName == "=" || string.IsNullOrEmpty(fieldName) || string.IsNullOrEmpty(subcomment) && fieldName == "=" || string.IsNullOrEmpty(fieldName)) break;
                            string RegStrings = "^[A-Za-z_$]+$";
                            Regex regex = new Regex(RegStrings, RegexOptions.IgnoreCase);
                            Match m = regex.Match(fieldName);
                            if (m.Success)
                            {
                                if (root.Element(currentCls.Name).Descendants(fieldName).Count() <= 0)  //TODO:不同类下面的具体field method
                                {
                                    if (!string.IsNullOrEmpty(item.Trim()))
                                    {
                                        if (!item.Contains("="))
                                        {
                                            if (!item.Contains("."))
                                            {
                                                if (!item.Contains("//"))
                                                {
                                                    #region
    
                                                    if (GetWordNumByLine(item) > 2)
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(3, item));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(3, item));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, item) + GetWordByLine(2, item));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    if (GetWordNumByLine(item) < 3 && GetWordNumByLine(item) > 1)
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(2, item));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(2, item));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, item));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    #endregion
                                                }
                                                else
                                                {
                                                    #region
    
                                                    string sub = item.Substring(0, item.IndexOf("//"));
                                                    if (GetWordNumByLine(sub) > 2 && !string.IsNullOrEmpty(sub))
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(3, sub));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(3, sub));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, sub) + GetWordByLine(2, sub));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    if (GetWordNumByLine(item) < 3 && GetWordNumByLine(sub) > 1 && !string.IsNullOrEmpty(sub))
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(2, sub));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(2, sub));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, sub));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    #endregion
                                                }
                                            }
    
    
                                        }
                                        else
                                        {
                                            string sub = item.Substring(0, item.IndexOf("="));
    
                                            if (!item.Contains("."))
                                            {
                                                if (!item.Contains("//"))
                                                {
                                                    #region
    
                                                    if (GetWordNumByLine(sub) > 2)
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(3, sub));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(3, sub));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, sub) + GetWordByLine(2, sub));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    if (GetWordNumByLine(sub) < 3 && GetWordNumByLine(sub) > 1)
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(2, sub));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(2, sub));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, sub));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    #endregion
                                                }
                                                else
                                                {
                                                    #region
    
                                                    //string sub = item.Substring(0, item.IndexOf("//"));
                                                    if (GetWordNumByLine(sub) > 2 && !string.IsNullOrEmpty(sub))
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(3, sub));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(3, sub));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, sub) + GetWordByLine(2, sub));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    if (GetWordNumByLine(item) < 3 && GetWordNumByLine(sub) > 1 && !string.IsNullOrEmpty(sub) && !item.Contains("///"))
                                                    {
                                                        XElement feild = new XElement(GetWordByLine(2, sub));
                                                        XAttribute fldName = new XAttribute("Name", GetWordByLine(2, sub));
                                                        XAttribute fldType = new XAttribute("Type", GetWordByLine(1, sub));
                                                        XAttribute parentClass = new XAttribute("ParentClass", currentParentNode.Name);
                                                        XAttribute lineNumber = new XAttribute("LineNumber", lineID);
                                                        XAttribute category = new XAttribute("Category", "Field");
                                                        feild.Add(fldName);
                                                        feild.Add(fldType);
                                                        feild.Add(parentClass);
                                                        feild.Add(lineNumber);
                                                        feild.Add(category);
                                                        currentParentNode.Add(feild);
                                                    }
                                                    #endregion
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                    }
                }
                //if (this.CommentStart && string.IsNullOrEmpty(this.editControl1.Lines[this.LineComment - 1].Replace('/', ' ').Trim()))
                //{
                //    int line = this.LineComment;
    
                //    if (line != 1)
                //    {
                //        while (string.IsNullOrEmpty(this.editControl1.Lines[line]))
                //        {
                //            line++;
                //        }
                //        xdoc = new XmlDocument();
                //        xdoc.LoadXml(root.ToString());
                //        XmlNodeReader reader = new XmlNodeReader(xdoc);
                //        XElement rootNode = XElement.Load(reader);
                //        if (!string.IsNullOrEmpty(GetWordByLine(1, this.editControl1.Lines[line])))
                //        {
    
                //            if (GetWordByLine(1, this.editControl1.Lines[line]) == "function")
                //            {
    
                //                //XDocument xdoc = XDocument.Load(root.ToString());
                //                if (GetWordNumByLine(this.editControl1.Lines[line]) > 2)
                //                {
                //                    string FuncName = GetWordByLine(3, this.editControl1.Lines[line]);
                //                    IEnumerable<XElement> targetNodes = from target in rootNode.Descendants(FuncName)
                //                                                        select target;
                //                    foreach (var item in targetNodes)
                //                    {
                //                        if (item.Element("Parameters").Attribute("ParaCount").Value == "2")
                //                        {
                //                            xel = item;
                //                        }
                //                    }
                //                }
                //            }
                //        }
                //    }
                //}
            }
    
            private void OverRideMethod(XElement currentParentNode, XElement currentCls, string item, int lexems)
            {
                List<string> types = new List<string>();
    
                IEnumerable<XElement> elements = root.Element(currentCls.Name).Elements(GetWordByLine(lexems, item.Trim()));
                foreach (var element in elements)
                {
    
                    types.Add(element.Attribute("ParametersType").Value);
                }
                if (types.Contains(this.GetVirtualParametersType(GetParameters(item))))
                {
                   
                }
                else
                {
                    currentParentNode.Add(currentNew);
                }
    
                // ||root.Element(currentCls.Name).Descendants(GetWordByLine(lexems, item.Trim())).Count() <= 0&&root.Element(currentCls.Name).Element(GetWordByLine(lexems,item)).Attribute("Name").Value!=item.Replace(';',' ').Trim()
                if (root.Element(currentCls.Name).Descendants(GetWordByLine(lexems, item.Trim())).Count() <= 0
                   )
                {
                    currentParentNode.Add(currentNew);
                }
    
    
            }
            //public XmlAttribute CreateAttribute(XmlNode node, string attributeName, string value)
            //{
            //    try
            //    {
            //        XmlDocument doc = node.OwnerDocument;
            //        XmlAttribute attr = null;
            //        attr = doc.CreateAttribute(attributeName);
            //        attr.Value = value;
            //        node.Attributes.SetNamedItem(attr);
            //        return attr;
            //    }
            //    catch (Exception err)
            //    {
            //        string desc = err.Message;
            //        return null;
            //    }
            //}
    
            private XElement xel;
    
            public XElement Xel
            {
                get { return xel; }
                set { xel = value; }
            }
            private static XmlDocument xdoc;
    
            public static XmlDocument Xdoc
            {
                get { return xdoc; }
                set { xdoc = value; }
            }
            private string GetWordByLine(int num, string line)
            {
                string[] strText;
                List<string> strList = new List<string>();
                if (!string.IsNullOrEmpty(line.Trim()))
                {
                    if (line.Contains(";"))
                    {
                        line = line.Replace(';', ' ').Trim();
                        if (!line.Contains("("))
                        {
                            if (line.Trim().Contains(" "))
                            {
                                strText = line.Trim().Split(' ');
                                strList.AddRange(strText);
                                List<string> list = new List<string>();
                                foreach (string item in strList)
                                {
                                    if (item != "")
                                    {
                                        list.Add(item);
                                    }
                                }
                                if (num < list.Count + 1)
                                    return list[num - 1].Trim();
                                else
                                    return "";
                            }
                            else
                            {
                                return line.Trim();
                            }
                        }
                        else
                        {
                            line = line.Substring(0, line.IndexOf("(")).Trim();
                            if (line.Trim().Contains(" "))
                            {
                                strText = line.Trim().Split(' ');
                                strList.AddRange(strText);
                                List<string> list = new List<string>();
                                foreach (string item in strList)
                                {
                                    if (item != "")
                                    {
                                        list.Add(item);
                                    }
                                }
                                if (num < list.Count + 1)
                                    return list[num - 1].Trim();
                                else
                                    return "";
                            }
                            else
                            {
                                return line.Trim();
                            }
                        }
                    }
                    else
                    {
                        if (!line.Contains("("))
                        {
                            if (line.Trim().Contains(" "))
                            {
                                strText = line.Trim().Split(' ');
                                strList.AddRange(strText);
                                List<string> list = new List<string>();
                                foreach (string item in strList)
                                {
                                    if (item != "")
                                    {
                                        list.Add(item);
                                    }
                                }
                                if (num < list.Count + 1)
                                    return list[num - 1].Trim();
                                else
                                    return "";
                            }
                            else
                            {
                                return line.Trim();
                            }
                        }
                        else
                        {
                            line = line.Substring(0, line.IndexOf("(")).Trim();
                            if (line.Trim().Contains(" "))
                            {
                                strText = line.Trim().Split(' ');
                                strList.AddRange(strText);
                                List<string> list = new List<string>();
                                foreach (string item in strList)
                                {
                                    if (item != "")
                                    {
                                        list.Add(item);
                                    }
                                }
                                if (num < list.Count + 1)
                                    return list[num - 1].Trim();
                                else
                                    return "";
                            }
                            else
                            {
                                return line.Trim();
                            }
                        }
                    }
    
                }
                return "";
            }
    
            private int GetWordNumByLine(string line)
            {
                string[] strText;
                List<string> strList = new List<string>();
                if (!string.IsNullOrEmpty(line.Trim()))
                {
                    if (!line.Contains("("))
                    {
                        if (line.Contains(";"))
                        {
                            strText = line.Replace(';', ' ').Trim().Split(' ');
                            strList.AddRange(strText);
                            List<string> list = new List<string>();
                            foreach (string item in strList)
                            {
                                if (item != "")
                                {
                                    list.Add(item);
                                }
                            }
                            int length = list.Count;
                            return length;
                        }
                        else
                        {
                            strText = line.Trim().Split(' ');
                            strList.AddRange(strText);
                            List<string> list = new List<string>();
                            foreach (string item in strList)
                            {
                                if (item != "")
                                {
                                    list.Add(item);
                                }
                            }
                            int length = list.Count;
                            return length;
                        }
                    }
                    else
                    {
                        line = line.Substring(0, line.IndexOf("(")).Trim();
                        if (line.Contains(";"))
                        {
                            strText = line.Replace(';', ' ').Trim().Split(' ');
                            strList.AddRange(strText);
                            List<string> list = new List<string>();
                            foreach (string item in strList)
                            {
                                if (item != "")
                                {
                                    list.Add(item);
                                }
                            }
                            int length = list.Count;
                            return length;
                        }
                        else
                        {
                            strText = line.Trim().Split(' ');
                            strList.AddRange(strText);
                            List<string> list = new List<string>();
                            foreach (string item in strList)
                            {
                                if (item != "")
                                {
                                    list.Add(item);
                                }
                            }
                            int length = list.Count;
                            return length;
                        }
                    }
                }
                return 0;
            }
            private string GetClsNameOfInstanse(int currentLine)
            {
                for (int i = currentLine - 1; i >= 0; i--)
                {
                    if (this.EditControl1.Lines[i].Contains("class "))
                    {
                        return this.GetWordByLine(2, this.EditControl1.Lines[i]);
                    }
                }
                return "";
            }
            private List<string> GetParameters(string lineText)
            {
                List<string> parameters = new List<string>();
                if (lineText.Contains("(") && lineText.Contains(")"))
                {
                    int index = lineText.IndexOf("(");
                    int index2 = lineText.IndexOf(")");
                    lineText = lineText.Substring(index + 1, index2 - index - 1);
                    if (!string.IsNullOrEmpty(lineText.Trim()))
                    {
                        if (lineText.Trim().Contains(","))
                        {
                            parameters.AddRange(lineText.Split(','));
                            return parameters;
                        }
                        else
                        {
                            parameters.Add(lineText.Trim());
                            return parameters;
                        }
                    }
                }
                return parameters;
            }
            // 如何获取方法体的xu参数类型
    
            private string GetVirtualParametersType(List<string> param)
            {
                string paraType = "";
                if (param.Count > 0)
                {
                    foreach (string item in param)
                    {
                        string[] str = item.Trim().Split(' ');
                        paraType = paraType + str[0].Trim() + " ";
                    }
                    return paraType;
                }
                return "";
            }
            //获取成员方法的实参的类型
            private string GetRealParametersType(List<string> param)
            {
                string paraType = "";
                List<string> para = new List<string>();
                XmlDocument xdoc = new XmlDocument();
                xdoc.LoadXml(Root.ToString());
                if (param.Count > 0)
                {
                    foreach (string item in param)
                    {
                        foreach (XmlNode node in xdoc.SelectNodes("//" + item))
                        {
                            if (node.Attributes["ParentClass"] != null)
                            {
                                node.Attributes["ParentClass"].Value = GetClassMembersParent(this.EditControl1.CurrentLine);
                                paraType = paraType + node.Attributes["Type"].Value + " ";
                            }
                        }
                    }
                    return paraType;
                }
                return "null";
            }
            private string GetClassMembersParent(int lineNum)
            {
                for (int i = lineNum - 1; i > 0; i--)
                {
                    if (this.EditControl1.Lines[i].Contains("class "))
                    {
                        return GetWordByLine(2, this.EditControl1.Lines[i]);
                    }
                }
                return "";
            }
        }
    }
    View Code

     所有这些是自己为了方便记载下来,仅供以后自己参考使用。

  • 相关阅读:
    F2etest v2.0.0 正式发布 ,阿里巴巴开源测试方案
    Spring-Wind 1.1.1 发布,SSM 架构核心库
    通过nginx配置文件抵御攻击 | WooYun知识库
    阿里云X-Forwarded-For 发现tomcat记录的日志全部来自于SLB转发的IP地址,不能获取到请求的真实IP。
    openresty+lua在反向代理服务中的玩法 | WooYun知识库
    java~lambda表达式让查询更优雅
    java~日期与字符串的转化
    java~google样式检查和命名规范
    springboot~Mongodb的集成与使用
    springboot~JPA把ORM统一起来
  • 原文地址:https://www.cnblogs.com/wuyuankun/p/3716417.html
Copyright © 2011-2022 走看看