public static void EliminatePages(IList<Dictionary<String, Object>> list, int[] pageRange)
{
if (list == null)
return;
for (ListIterator<Dictionary<String, Object>> it = new ListIterator<Dictionary<string,object>>(list); it.HasNext();) {
Dictionary<String, Object> map = it.Next();
bool hit = false;
if (map.ContainsKey("Action") && "GoTo".Equals(map["Action"])) {
String page = null;
if (map.ContainsKey("Page"))
page = (String)map["Page"];
if (page != null) {
page = page.Trim();
int idx = page.IndexOf(' ');
int pageNum;
if (idx < 0)
pageNum = int.Parse(page);
else
pageNum = int.Parse(page.Substring(0, idx));
int len = pageRange.Length & 0x7ffffffe;
for (int k = 0; k < len; k += 2) {
if (pageNum >= pageRange[k] && pageNum <= pageRange[k + 1]) {
hit = true;
break;
}
}
}
}
IList<Dictionary<String, Object>> kids = null;
if (map.ContainsKey("Kids"))
kids = (IList<Dictionary<String, Object>>)map["Kids"];
if (kids != null) {
EliminatePages(kids, pageRange);
if (kids.Count == 0) {
map.Remove("Kids");
kids = null;
}
}
if (hit) {
if (kids == null)
it.Remove();
else {
map.Remove("Action");
map.Remove("Page");
map.Remove("Named");
}
}
}
}