anchor.diff:                      true
                   elif currentText.IsAt(textOffset, "#if") then
                       this.ScanPreProcessorIf(textOffset,&i)
  -                    true      
  -                else
  -                    if (this.CurSpan <> null && this.CurSpan.Color <> "Excluded Code") then
  -                        base.ScanSpan(&i)
  -                    else
  -                        false
  -            else
  -                if (this.CurSpan <> null && this.CurSpan.Color <> "Excluded Code") then
  +                    false      
  +                elif currentText.IsAt(textOffset,"#endif") then
  +                    let span = EndIfBlockSpan()
  +                    this.FoundSpanBegin.Invoke(span, i + textOffset, 6)
  +                    this.FoundSpanEnd.Invoke(span, i + textOffset + 6,0)
  +                    true
  +                elif (this.CurSpan <> null && this.CurSpan.Color <> "Excluded Code") then
                       base.ScanSpan(&i)
                   else
                       false
  +            elif (this.CurSpan <> null && this.CurSpan.Color <> "Excluded Code") then
  +                base.ScanSpan(&i)
  +            else
  +                false
   
   [<AutoOpen>]
   module internal Patterns =
  
positive.code:                 this.FoundSpanBegin.Invoke(CommentBlockSpan(),i,1)
                          
              if (this.CurRule.Name <> "String") then
                  let span = 
                      if currentText.IsAt(textOffset, "\"") then
                          StringSpan() :> AbstractStringSpan
                      elif currentText.IsAt(textOffset, "\"\"\"") then
                          TripleQuotedStringSpan():> AbstractStringSpan
                      elif currentText.IsAt(textOffset, "@\"") then
                          VerbatimStringSpan():> AbstractStringSpan
                      else null
                  if (span <> null) then
                      this.FoundSpanBegin.Invoke(span, i, span.Begin.Pattern.Length)
                      i <- i + span.Begin.Pattern.Length
              else 
                  if typeof<AbstractStringSpan>.IsAssignableFrom(this.CurSpan.GetType()) then
                      if (currentText.Contains("\"\"\"")) then
                          this.FoundSpanEnd.Invoke(this.CurSpan,i + currentText.IndexOf("\"\"\""),3)
                          
              if (textOffset < this.CurText.Length && this.CurRule.Name <> "Comment" &&
                  this.CurRule.Name <> "String" && this.CurRule.Name <> "VerbatimString" &&
                  this.CurText.[textOffset] = '#' && this.IsFirstNonWsChar(textOffset)) then
  
negative.code:     type AbstractStringSpan () as this =
          inherit Span() 
          do
              this.StopAtEol <- false
              this.Rule <- "String"
              this.Color <- "String"
  
  