anchor.diff:  
   interface
   
  +uses
  +  SysUtils;
  +
   Type
     TMarkdownProcessorDialect = (mdDaringFireball);
   
  
positive.code:     function GetUnSafe: boolean; virtual; abstract;
      procedure SetUnSafe(const Value: boolean); virtual; abstract;
    public
      class function CreateDialect(dialect : mdDaringFireball);
  
      // when Unsafe = true, then the processor can create scripts etc.
      property UnSafe : boolean read GetUnSafe write SetUnSafe;
  
negative.code: 
  implementation
  
  uses
    MarkdownDaringFireball;
  
  { TMarkdownProcessor }
  
  class function TMarkdownProcessor.CreateDialect(dialect: TMarkdownProcessorDialect): TMarkdownProcessor;
  begin
    case dialect of
      mdDaringFireball : result := TMarkdownDaringFireball.Create;
    else
      raise Exception.Create('Unknown Markdown dialect');
    end;
  end;
  
  end.
  