anchor.diff:    inherited;
   end;
   
  +procedure TRazorResource.DoError(APageInfo: TPageInfo);
  +begin
  +end;
  +
   function TRazorResource.DoProvideContext(const APathInfo,
     APathParam: string): TArray<TContextEntry>;
   begin
  -  Result := [];
  +  Result := [TContextEntry.Create('resource', Self, False)];
   end;
   
   function TRazorResource.GetDocument: string;
  
positive.code: 
    for LEntry in LContext do
      ExecData.razorProc.AddToDictionary(LEntry.Name, LEntry.Instance, LEntry.Owned);
  end;
  
  { TContextEntry }
  
negative.code:   );
  end;
  
  function TRazorResource.GetErrorPage: string;
  begin
    Result := GetRazorAttributeValue<RazorErrorPageAttribute>(Self, 'error.html');
  end;
  
  function TRazorResource.GetFilesFolder: string;
  begin
    Result := GetRazorAttributeValue<RazorFilesFolderAttribute>(Self,
      IncludeTrailingPathDelimiter(
        TPath.Combine(ExtractFilePath(ParamStr(0)), 'files')
      )
    );
  end;
  
  function TRazorResource.GetHomePage: string;
  begin
    Result := GetRazorAttributeValue<RazorHomePageAttribute>(Self, 'index');
  end;
  
  function TRazorResource.GetRazorAttributeValue<T>(const AInstance: TObject;
    const ADefault: string): string;
  var
    LValue: string;
  begin
    LValue := ADefault;
    TRttiHelper.IfHasAttribute<T>(Self
      , procedure (AAttrib: T)
        begin
          LValue := AAttrib.Value;
        end
    );
    Result := LValue;
  end;
  
  function TRazorResource.GetTemplatesFolder: string;
  begin
    Result := GetRazorAttributeValue<RazorTemplatesFolderAttribute>(Self,
      IncludeTrailingPathDelimiter(
        TPath.Combine(ExtractFilePath(ParamStr(0)), 'templates')
      )
    );
  end;
  
  