public static void ShiftPageNumbers(IList<Dictionary<String, Object>> list, int pageShift, int[] pageRange)
{
if (list == null)
return;
foreach (Dictionary<String, Object> map in list) {
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));
bool hit = false;
if (pageRange == null)
hit = true;
else {
int len = pageRange.Length & 0x7ffffffe;
for (int k = 0; k < len; k += 2) {
if (pageNum >= pageRange[k] && pageNum <= pageRange[k + 1]) {
hit = true;
break;
}
}
}
if (hit) {
if (idx < 0)
page = (pageNum + pageShift) + "";
else
page = (pageNum + pageShift) + page.Substring(idx);
}
map["Page"] = page;
}
}
IList<Dictionary<String, Object>> kids = null;
if (map.ContainsKey("Kids"))
kids = (IList<Dictionary<String, Object>>)map["Kids"];
if (kids != null)
ShiftPageNumbers(kids, pageShift, pageRange);
}
}