public HasFieldMarshal(MetadataTable table, ZeroBasedIndex index) { if (table != MetadataTable.Field && table != MetadataTable.Param) { throw new ArgumentOutOfRangeException("table"); } m_index = ((OneBasedIndex) index) | ((table == MetadataTable.Param ? 1u : 0u) << 1); }
public TypeOrMethodDef(MetadataTable table, ZeroBasedIndex index) { if (table != MetadataTable.TypeDef && table != MetadataTable.MethodDef) { throw new ArgumentException("Expected TypeDef or MethodDef", "table"); } var tableId = (table == MetadataTable.TypeDef) ? 0u : 1u; m_index = ((OneBasedIndex) index << 1) | tableId; }
public HasCustomAttribute(MetadataTable table, ZeroBasedIndex index) { uint value; if (! s_inverseTables.TryGetValue(table, out value)) { throw new ArgumentException("HasCustomAttributes does not support the provided meta-data table", "table"); } m_index = (OneBasedIndex) index | (value << 5); }
public HasCustomAttribute(OneBasedIndex index) { m_index = index; }
public HasSemantics(OneBasedIndex index) { m_index = index; }
public TypeOrMethodDef(OneBasedIndex index) { m_index = index; }
public MetadataToken(OneBasedIndex value) { m_value = value; }
public void ConvertToCode() { var doc = XDocument.Load(this.file.FullName); var cellFormulas = new SortedDictionary <IAddress, ExcelFormula <A1Style> >(new AddressComparer()); var cellElements = new Dictionary <IAddress, XElement>(); var ns = doc.Root.Name.Namespace; if (doc.Root.Name.LocalName != "worksheet") { return; } var sheetData = doc.Descendants(ns + "sheetData").SingleOrDefault(); if (sheetData == null) { return; } var toRemove = new List <XElement>(); foreach (var row in sheetData.Descendants(ns + "row")) { foreach (var cell in row.Elements(ns + "c")) { var r = cell.Attribute("r"); var address = Formula.ParseA1(r.Value).ToAddress(Address.Worksheet("Book1", "Sheet1")); cellElements.Add(address, cell); var f = cell.Element(ns + "f"); if (f != null && !string.IsNullOrWhiteSpace(f.Value)) { try { cellFormulas.Add(address, Formula.ParseA1(f.Value)); } catch { cellFormulas.Add(address, null); } } else { cellFormulas.Add(address, null); } } toRemove.Add(row); } toRemove.ForEach(x => x.Remove()); var nodes = new Dictionary <IAddress, GraphNode <IAddress, ExcelFormula <A1Style> > >(); while (cellFormulas.Count > 0) { var current = cellFormulas.First(); // We want to find columns of cells which contain the same (R1C1) formula var rows = new OneBasedIndex(1); IAddress cellBelow; ExcelFormula <A1Style> formulaBelow; do { rows++; cellBelow = current.Key[rows, new OneBasedIndex(1)]; }while (current.Value != null && cellFormulas.TryGetValue(cellBelow, out formulaBelow) && formulaBelow != null && formulaBelow.ToR1C1Style(cellBelow).Equals(current.Value.ToR1C1Style(current.Key))); var bottomRight = current.Key.Resize(rows.Value - 1, 1).BottomRight; for (var i = new OneBasedIndex(1); i <= rows; i++) { var cellAddress = current.Key[i, new OneBasedIndex(1)]; var multiAddress = bottomRight.Union(cellAddress); nodes.Add(cellAddress, new GraphNode <IAddress, ExcelFormula <A1Style> >(multiAddress, cellFormulas[cellAddress])); cellFormulas.Remove(cellAddress); } } var noPrecedents = new SortedList <IAddress, GraphNode <IAddress, ExcelFormula <A1Style> > >(new AddressComparer()); foreach (var node in nodes) { if (node.Value.Value == null) { noPrecedents.Add(node.Value.Key, node.Value); continue; } var anyPrecedents = false; var parsed = node.Value.Value; foreach ( var referencedAddress in GetReferences(parsed, node.Key).Where(x => !x.IsName).SelectMany(x => x.Addresses)) { for (var i = 0; i < referencedAddress.Rows; i++) { for (var j = 0; j < referencedAddress.Columns; j++) { var referencedCell = referencedAddress[new OneBasedIndex(i + 1), new OneBasedIndex(j + 1)]; GraphNode <IAddress, ExcelFormula <A1Style> > referencedFormula; if (nodes.TryGetValue(referencedCell, out referencedFormula)) { node.Value.DependsOn(referencedFormula); anyPrecedents = true; } } } } if (!anyPrecedents) { noPrecedents.Add(node.Value.Key, node.Value); } } var sorted = new List <GraphNode <IAddress, ExcelFormula <A1Style> > >(); while (noPrecedents.Count > 0) { var next = noPrecedents.Values[0]; noPrecedents.Remove(next.Key); sorted.Add(next); foreach (var dependent in next.Dependents.Values) { dependent.Precedents.Remove(next.Key); if (dependent.Precedents.Count == 0) { noPrecedents.Add(dependent.Key, dependent); } } } var styleMap = new Dictionary <string, List <IAddress> >(); var styleOrder = new List <XAttribute>(); var cellsElement = new XElement(ns + "cells"); var previousAddress = Address.Range("Book1", "Sheet1", new OneBasedIndex(1), new OneBasedIndex(1)); foreach (var node in sorted) { var cellAddress = node.Key.Addresses.Last(); var cellElement = cellElements[cellAddress]; var styleAttribute = cellElement.Attribute("s"); if (styleAttribute != null) { styleAttribute.Remove(); List <IAddress> styleCells; if (styleMap.TryGetValue(styleAttribute.Value, out styleCells)) { styleCells.Add(node.Key); } else { styleOrder.Add(styleAttribute); styleMap.Add(styleAttribute.Value, new List <IAddress> { node.Key }); } } if (cellElement.HasElements || cellElement.Attributes().Any(x => x.Name != "r")) { var r = cellElement.Attribute("r"); cellElement.Add(new XAttribute("r2", cellAddress.ReferencedFromR1C1(previousAddress).ToString())); r.Remove(); previousAddress = cellAddress; if (node.Value != null) { var formulaElement = cellElement.Element(ns + "f"); if (formulaElement != null) { formulaElement.Remove(); } cellElement.Add(new XElement(ns + "f2", node.Value.ToR1C1Style(cellAddress).ToString())); } cellsElement.Add(cellElement); } } var cellsFile = Path.Combine(this.file.Directory.FullName, string.Format("{0}-cells.xml", Path.GetFileNameWithoutExtension(this.file.Name))); new XDocument(cellsElement).Save(cellsFile); var stylesElement = new XElement(ns + "styles"); foreach (var style in styleOrder) { var styleElement = new XElement(ns + "style", style); stylesElement.Add(styleElement); foreach (var cell in styleMap[style.Value]) { styleElement.Add(new XElement(ns + "c", new XAttribute("r", cell.Addresses.Last().ReferencedFrom(cell.EntireSheet).ToString()))); } } var stylesFile = Path.Combine(this.file.Directory.FullName, string.Format("{0}-styles.xml", Path.GetFileNameWithoutExtension(this.file.Name))); new XDocument(stylesElement).Save(stylesFile); doc.Save(Path.Combine(this.file.Directory.FullName, string.Format("{0}-core.xml", Path.GetFileNameWithoutExtension(this.file.Name)))); }
public MethodDefOrRef(OneBasedIndex index) { m_index = index; }
public CustomAttributeConstructor(OneBasedIndex index) { m_index = index; }
public TypeDefOrRef(OneBasedIndex index) { m_index = index; }
public HasFieldMarshal(OneBasedIndex index) { m_index = index; }