ParserResourceCatalog: a ResourceCatalog that is constructed from a Parser

This commit is contained in:
Aaron Bockover 2012-06-28 17:34:05 -04:00
Родитель f13a1f0e05
Коммит 7687ace88e
1 изменённых файлов: 71 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,71 @@
//
// ParserResourceCatalog.cs
//
// Author:
// Aaron Bockover <abock@rd.io>
//
// Copyright 2012 Rdio, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Collections.Generic;
using Vernacular;
using Vernacular.Tool;
using Vernacular.Parsers;
namespace Vernacular.Test
{
public sealed class ParserResourceCatalog : ResourceCatalog
{
private Dictionary<string, string> resources = new Dictionary<string, string> ();
public override Func<string, string> GetResourceById {
get { return GetResourceByIdImplementation; }
set { throw new InvalidOperationException (); }
}
public ParserResourceCatalog (Parser parser)
{
foreach (var unit in parser.Parse ()) {
var str = unit as LocalizedString;
if (str != null) {
foreach (var resource in ResourceString.Generate (ResourceIdType, str)) {
resources.Add (resource.Id, resource.Translated);
}
}
}
}
private string GetResourceByIdImplementation (string id)
{
if (id == null) {
return null;
}
string resource;
if (resources.TryGetValue (id, out resource)) {
return resource;
}
return null;
}
}
}