anchor.diff:                  | "preserve_newest" -> CopyToOutputDirectorySettings.PreserveNewest
                   | x -> failwithf "Unknown copy_content_to_output_dir settings: %A" x
                           
  -            ParserOptions(ParserOption.CopyContentToOutputDir(setting))
  -        | String.StartsWith "condition" trimmed -> ParserOptions(ParserOption.ReferenceCondition(trimmed.Replace(":","").Trim().ToUpper()))
  +            Some (ParserOptions(ParserOption.CopyContentToOutputDir(setting)))
  +        | String.StartsWith "condition" trimmed -> Some (ParserOptions(ParserOption.ReferenceCondition(trimmed.Replace(":","").Trim().ToUpper())))
  +        | _ -> None
  +        
  +    let private (|SourceFile|_|) (line:string) =
  +        let trimmed = line.Trim() 
  +        match trimmed with
           | String.StartsWith "gist" _ as trimmed ->
  -            SourceFile(parseGitSource trimmed Origin.GistLink "gist")
  +            Some (SourceFile(parseGitSource trimmed Origin.GistLink "gist"))
           | String.StartsWith "github" _ as trimmed  ->
  -            SourceFile(parseGitSource trimmed Origin.GitHubLink "github")
  +            Some (SourceFile(parseGitSource trimmed Origin.GitHubLink "github"))
  +        | String.StartsWith "http" _ as trimmed  ->
  +            Some (SourceFile(parseHttpSource trimmed))
  +        | _ -> None 
  +
  +    let private (|Git|_|) (line:string) =
  +        let trimmed = line.Trim() 
  +        match trimmed with
           | String.StartsWith "git" _ as trimmed  ->
  -            Git(trimmed.Substring(4))
  +            Some (Git(trimmed.Substring(4)))
           | String.StartsWith "file:" _ as trimmed  ->
  -            Git(trimmed)
  -        | String.StartsWith "http" _ as trimmed  ->
  -            SourceFile(parseHttpSource trimmed)
  -        | String.StartsWith "//" _ -> Empty(line)
  -        | String.StartsWith "#" _ -> Empty(line)
  -        | _ -> failwithf "Unrecognized token: %s" line
  +            Some (Git(trimmed))
  +        | _ -> None
  +        
  +    let private (|Group|_|) (line:string) =
  +        let trimmed = line.Trim() 
  +        match trimmed with
  +        | String.StartsWith "group" _ as trimmed -> Some (Group(trimmed.Replace("group ","")))
  +        | _ -> None
       
       let parsePackage(sources,parent,name,version,rest:string) =
           let prereleases,optionsText =
  
positive.code:                 | "once" -> ContentCopySettings.OmitIfExisting
                  | _ -> ContentCopySettings.Overwrite
  
              ParserOptions(ParserOption.OmitContent(setting))
          | String.StartsWith "import_targets" trimmed -> ParserOptions(ParserOption.ImportTargets(trimmed.Replace(":","").Trim() = "true"))
          | String.StartsWith "copy_local" trimmed -> ParserOptions(ParserOption.CopyLocal(trimmed.Replace(":","").Trim() = "true"))
          | String.StartsWith "copy_content_to_output_dir" trimmed -> 
              let setting =
                  match trimmed.Replace(":","").Trim().ToLowerInvariant() with
  
negative.code:                 | "min" -> Some ResolverStrategy.Min
                  | _ -> None
  
              Some (ParserOptions(ParserOption.ResolverStrategyForTransitives(setting)))
          | String.StartsWith "lowest_matching" trimmed -> 
              let setting =
                  match trimmed.Replace(":","").Trim().ToLowerInvariant() with
  