public override OTTable GenerateTable() { ArrayList bytesNameString = new ArrayList(); ushort nLengthOfStrings = 0; ushort nStartOfStringStorage = (ushort)(6 + (m_nameRecords.Count * 12)); for (ushort i = 0; i < m_nameRecords.Count; i++) { NameRecordCache nrc = (NameRecordCache)m_nameRecords[i]; byte[] byteString = EncodeString(nrc.sNameString, nrc.platformID, nrc.encodingID); bytesNameString.Add(byteString); nLengthOfStrings += (ushort)byteString.Length; } // create a Motorola Byte Order buffer for the new table MBOBuffer newbuf = new MBOBuffer((uint)(Table_name.FieldOffsets.NameRecords + (m_nameRecords.Count * 12) + nLengthOfStrings)); // populate the buffer newbuf.SetUshort(m_format, (uint)Table_name.FieldOffsets.FormatSelector); newbuf.SetUshort((ushort)m_nameRecords.Count, (uint)Table_name.FieldOffsets.NumberNameRecords); newbuf.SetUshort(nStartOfStringStorage, (uint)Table_name.FieldOffsets.OffsetToStrings); ushort nOffset = 0; // Write the NameRecords and Strings for (ushort i = 0; i < m_nameRecords.Count; i++) { byte[] bString = (byte[])bytesNameString[i]; newbuf.SetUshort(((NameRecordCache)m_nameRecords[i]).platformID, (uint)(Table_name.FieldOffsets.NameRecords + (i * 12))); newbuf.SetUshort(((NameRecordCache)m_nameRecords[i]).encodingID, (uint)(Table_name.FieldOffsets.NameRecords + (i * 12) + 2)); newbuf.SetUshort(((NameRecordCache)m_nameRecords[i]).languageID, (uint)(Table_name.FieldOffsets.NameRecords + (i * 12) + 4)); newbuf.SetUshort(((NameRecordCache)m_nameRecords[i]).nameID, (uint)(Table_name.FieldOffsets.NameRecords + (i * 12) + 6)); newbuf.SetUshort((ushort)bString.Length, (uint)(Table_name.FieldOffsets.NameRecords + (i * 12) + 8)); newbuf.SetUshort(nOffset, (uint)(Table_name.FieldOffsets.NameRecords + (i * 12) + 10)); //Write the string to the buffer for (int ii = 0; ii < bString.Length; ii++) { newbuf.SetByte(bString[ii], (uint)(nStartOfStringStorage + nOffset + ii)); } nOffset += (ushort)bString.Length; } // put the buffer into a Table_name object and return it Table_name nameTable = new Table_name("name", newbuf); return(nameTable); }
public NameRecordCache getNameRecord(ushort nIndex) { NameRecordCache nrc = null; if (nIndex >= m_nameRecords.Count) { throw new ArgumentOutOfRangeException("nIndex is greater than the amount of name records."); } else { nrc = (NameRecordCache)((NameRecordCache)m_nameRecords[nIndex]).Clone(); } return(nrc); }
protected int GetInsertionPosition(ushort platformID, ushort encodingID, ushort languageID, ushort nameID) { int nIndex = 0; if (GetNameRecordIndex(platformID, encodingID, languageID, nameID) != -1) { // can't insert because the specified IDs are already in the list nIndex = -1; } else { if (m_nameRecords.Count != 0) { // check for insertion before the first string NameRecordCache nrcTemp = (NameRecordCache)m_nameRecords[0]; int nCompare = nrcTemp.CompareNameRecordToIDs(platformID, encodingID, languageID, nameID); if (nCompare == 1) { nIndex = 0; } else { // check for insertion between two other strings for (int i = 0; i < m_nameRecords.Count - 1; i++) { NameRecordCache nrcCurr = (NameRecordCache)m_nameRecords[i]; NameRecordCache nrcNext = (NameRecordCache)m_nameRecords[i + 1]; // check if specified IDs are greater than the current object and less than the next object int nCmp1 = nrcCurr.CompareNameRecordToIDs(platformID, encodingID, languageID, nameID); int nCmp2 = nrcNext.CompareNameRecordToIDs(platformID, encodingID, languageID, nameID); if (nCmp1 == -1 && nCmp2 == 1) { nIndex = i + 1; break; } } // if not found yet then insertion position is at end of list if (nIndex == 0) { nIndex = m_nameRecords.Count; } } } } return(nIndex); }
protected bool setNameRecord(ushort nIndex, ushort platformID, ushort encodingID, ushort languageID, ushort nameID, string sNameString) { bool bResult = true; if (nIndex >= m_nameRecords.Count) { bResult = false; throw new ArgumentOutOfRangeException("nIndex is greater than the amount of name records."); } else { m_nameRecords[nIndex] = new NameRecordCache(platformID, encodingID, languageID, nameID, sNameString); m_bDirty = true; } return(bResult); }
public int GetNameRecordIndex(ushort platformID, ushort encodingID, ushort languageID, ushort nameID) { int nIndex = -1; // return -1 if not found for (int i = 0; i < m_nameRecords.Count; i++) { NameRecordCache nrcTemp = (NameRecordCache)m_nameRecords[i]; if (nrcTemp.platformID == platformID && nrcTemp.encodingID == encodingID && nrcTemp.languageID == languageID && nrcTemp.nameID == nameID) { nIndex = i; break; } } return(nIndex); }
public NameRecordCache getNameRecord(ushort platformID, ushort encodingID, ushort languageID, ushort nameID) { NameRecordCache nrc = null; for (int i = 0; i < m_nameRecords.Count; i++) { NameRecordCache nrcTemp = (NameRecordCache)m_nameRecords[i]; if (nrcTemp.platformID == platformID && nrcTemp.encodingID == encodingID && nrcTemp.languageID == languageID && nrcTemp.nameID == nameID) { nrc = (NameRecordCache)nrcTemp.Clone(); break; } } return(nrc); }
protected bool setNameRecord( ushort nIndex, ushort platformID, ushort encodingID, ushort languageID, ushort nameID, string sNameString ) { bool bResult = true; if( nIndex >= m_nameRecords.Count ) { bResult = false; throw new ArgumentOutOfRangeException( "nIndex is greater than the amount of name records." ); } else { m_nameRecords[nIndex] = new NameRecordCache( platformID, encodingID, languageID, nameID, sNameString ); m_bDirty = true; } return bResult; }