本文整理汇总了C#中OTFontFileVal.Validator.PerformTest方法的典型用法代码示例。如果您正苦于以下问题:C# Validator.PerformTest方法的具体用法?C# Validator.PerformTest怎么用?C# Validator.PerformTest使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OTFontFileVal.Validator
的用法示例。
在下文中一共展示了Validator.PerformTest方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.VORG_CFF_Font))
{
if (fontOwner.ContainsPostScriptOutlines())
{
v.Pass(T.VORG_CFF_Font, P.VORG_P_CFF_Font, m_tag);
}
else
{
v.Error(T.VORG_CFF_Font, E.VORG_E_CFF_Font, m_tag);
bRet = false;
}
}
if (v.PerformTest(T.VORG_Version))
{
if (majorVersion == 1 && minorVersion == 0)
{
v.Pass(T.VORG_Version, P.VORG_P_Version, m_tag);
}
else
{
v.Error(T.VORG_Version, E.VORG_E_Version, m_tag);
bRet = false;
}
}
return bRet;
}
示例2: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
Table_maxp maxpTable = (Table_maxp)fontOwner.GetTable("maxp");
if (maxpTable == null)
{
v.Error(T.T_NULL, E._TEST_E_TableMissing, m_tag, "Unable to test this table, maxp table is invalid or missing");
return false;
}
if (v.PerformTest(T.vmtx_TableLength))
{
uint CalcTableLength = GetNumOfLongVerMetrics(fontOwner)*4
+ (fontOwner.GetMaxpNumGlyphs() - GetNumOfLongVerMetrics(fontOwner))*2;
if (CalcTableLength == GetLength())
{
v.Pass(T.vmtx_TableLength, P.vmtx_P_TableLength, m_tag);
}
else
{
v.Error(T.vmtx_TableLength, E.vmtx_E_TableLength, m_tag);
bRet = false;
}
}
return bRet;
}
示例3: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.vhea_version))
{
if (version.GetUint() == 0x00010000 || version.GetUint() == 0x00011000)
{
v.Pass(T.vhea_version, P.vhea_P_version, m_tag, "0x" + version.GetUint().ToString("x8"));
}
else
{
v.Error(T.vhea_version, E.vhea_E_version, m_tag, "0x" + version.GetUint().ToString("x8"));
bRet = false;
}
}
if (v.PerformTest(T.vhea_ReservedFields))
{
if (reserved1 == 0 && reserved2 == 0 && reserved3 == 0 && reserved4 == 0)
{
v.Pass(T.vhea_ReservedFields, P.vhea_P_ReservedFields, m_tag);
}
else
{
v.Error(T.vhea_ReservedFields, E.vhea_E_ReservedFields, m_tag);
bRet = false;
}
}
if (v.PerformTest(T.vhea_metricDataFormat))
{
if (metricDataFormat == 0)
{
v.Pass(T.vhea_metricDataFormat, P.vhea_P_metricDataFormat, m_tag);
}
else
{
v.Error(T.vhea_metricDataFormat, E.vhea_E_metricDataFormat, m_tag, metricDataFormat.ToString());
bRet = false;
}
}
return bRet;
}
示例4: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.cvt_length))
{
if ((m_bufTable.GetLength() & 1) != 0)
{
v.Error(T.cvt_length, E.cvt_E_length_odd, m_tag);
bRet = false;
}
else
{
v.Pass(T.cvt_length, P.cvt_P_length_even, m_tag);
}
}
return bRet;
}
示例5: Validate
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.cmap_Version))
{
if (TableVersionNumber == 0)
{
v.Pass(T.cmap_Version, P.cmap_P_version, m_tag);
}
else
{
v.Error(T.cmap_Version, E.cmap_E_version, m_tag,
TableVersionNumber.ToString());
bRet = false;
}
}
// Check that the number of encoding records seems to
// agree with the numTables field, and that each offset
// is greater than 0 and less than the length of the cmap
// table.
bool bOffsetsOk = true;
if (v.PerformTest(T.cmap_SubtableOffset))
{
for (uint i=0; i<NumberOfEncodingTables; i++)
{
EncodingTableEntry ete = GetEncodingTableEntry(i);
if (ete != null)
{
if (ete.offset == 0)
{
v.Error(T.cmap_SubtableOffset,
E.cmap_E_SubtableOffset_zero, m_tag,
"encoding table entry index = " +
i.ToString() + ", platformID = " +
ete.platformID + ", encodingID = " +
ete.encodingID);
bRet = false;
bOffsetsOk = false;
}
if (ete.offset > m_bufTable.GetLength())
{
v.Error(T.cmap_SubtableOffset,
E.cmap_E_SubtableOffset_eot, m_tag,
"encoding table entry index = " +
i.ToString() + ", platformID = " +
ete.platformID +
", encodingID = " + ete.encodingID);
bRet = false;
bOffsetsOk = false;
}
}
else
{
v.Warning(T.cmap_SubtableOffset,
W._TEST_W_OtherErrorsInTable, m_tag,
"cmap table appears to be corrupt. " +
" No further tests will be performed.");
return bRet;
}
}
if (bOffsetsOk)
{
v.Pass(T.cmap_SubtableOffset, P.cmap_P_SubtableOffset,
m_tag);
}
}
// Check that each subtable can be retrieved from the font
// and that its offset + length lies within the cmap.
bool bLengthsOk = true;
if (v.PerformTest(T.cmap_SubtableLength))
{
for (uint i=0; i<NumberOfEncodingTables; i++)
{
EncodingTableEntry ete = GetEncodingTableEntry(i);
Subtable st = GetSubtable(ete);
if (st != null)
{
if (st.length == 0)
{
v.Error(T.cmap_SubtableLength,
E.cmap_E_SubtableLength_zero, m_tag,
i.ToString());
bRet = false;
bLengthsOk = false;
}
if (ete.offset + st.length > m_bufTable.GetLength())
{
v.Error(T.cmap_SubtableLength,
E.cmap_E_SubtableLength_eot, m_tag,
//.........这里部分代码省略.........
示例6: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.head_TableLength))
{
if (m_bufTable.GetLength() == 54)
{
v.Pass(T.head_TableLength, P.head_P_TableLength, m_tag);
}
else
{
v.Error(T.head_TableLength, E.head_E_TableLength, m_tag, m_bufTable.GetLength().ToString());
bRet = false;
}
}
if (v.PerformTest(T.head_TableVersion))
{
if (TableVersionNumber.GetUint() == 0x00010000)
{
v.Pass(T.head_TableVersion, P.head_P_TableVersion, m_tag);
}
else
{
v.Error(T.head_TableVersion, E.head_E_TableVersion, m_tag, "0x"+TableVersionNumber.GetUint().ToString("x8"));
bRet = false;
}
}
if (v.PerformTest(T.head_fontRevision))
{
string sVersion = fontOwner.GetFontVersion();
if (sVersion != null)
{
if (sVersion.Length >= 11
&& sVersion.StartsWith("Version ")
&& Char.IsDigit(sVersion, 8))
{
string sVersionNum = sVersion.Substring(8);
bool bFoundDecPt = false;
int nLastDigitPos = 0;
for (int i=0; i<sVersionNum.Length; i++)
{
if (Char.IsDigit(sVersionNum, i))
{
nLastDigitPos = i;
}
else if (sVersionNum[i] == '.')
{
if (!bFoundDecPt)
{
bFoundDecPt = true;
}
else
{
break;
}
}
else
{
break;
}
}
double fVersion = Double.Parse(sVersionNum.Substring(0, nLastDigitPos+1));
double fRevision = fontRevision.GetDouble();
if (Math.Round(fVersion, 3) == Math.Round(fRevision, 3))
{
v.Pass(T.head_fontRevision, P.head_P_fontRevision, m_tag, fRevision.ToString("f3"));
}
else
{
string s = "revision: " + fRevision.ToString("f3") + ", version: " + sVersionNum;
v.Warning(T.head_fontRevision, W.head_W_fontRevision, m_tag, s);
}
}
}
}
if (v.PerformTest(T.head_ChecksumAdjustment))
{
if (checkSumAdjustment == 0xb1b0afba - fontOwner.CalcChecksum())
{
v.Pass(T.head_ChecksumAdjustment, P.head_P_FontChecksum, m_tag, "0x"+checkSumAdjustment.ToString("x8"));
}
else
{
v.Error(T.head_ChecksumAdjustment, E.head_E_FontChecksum, m_tag, "0x"+checkSumAdjustment.ToString("x8"));
bRet = false;
}
}
if (v.PerformTest(T.head_MagicNumber))
//.........这里部分代码省略.........
示例7: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.OS_2_Version))
{
if (version == 0 || version == 1 || version == 2)
{
v.Warning(T.OS_2_Version, W.OS_2_W_Version_old, m_tag, version.ToString());
}
else if (version == 3)
{
v.Pass(T.OS_2_Version, P.OS_2_P_Version, m_tag, version.ToString());
}
else
{
v.Error(T.OS_2_Version, E.OS_2_E_Version, m_tag, version.ToString());
bRet = false;
}
}
if (v.PerformTest(T.OS_2_TableLength))
{
uint len = GetLength();
if ((version == 0 && len == 78)
|| (version == 1 && len == 86)
|| (version == 2 && len == 96)
|| (version == 3 && len == 96))
{
v.Pass(T.OS_2_TableLength, P.OS_2_P_TableLength, m_tag);
}
else
{
v.Error(T.OS_2_TableLength, E.OS_2_E_TableLength, m_tag);
bRet = false;
}
}
if (!bRet)
{
v.Warning(T.T_NULL, W._TEST_W_OtherErrorsInTable, m_tag, "OS/2 table appears to be corrupt. No further tests will be performed.");
return bRet;
}
if (v.PerformTest(T.OS_2_xAvgCharWidth))
{
if (fontOwner.GetTable("maxp") == null)
{
v.Warning(T.OS_2_xAvgCharWidth, W._TEST_W_ErrorInAnotherTable, m_tag, "maxp table inaccessible, can't check Avg Char Width");
}
else
{
if (fontOwner.ContainsTrueTypeOutlines())
{
Table_hmtx hmtxTable = (Table_hmtx)fontOwner.GetTable("hmtx");
val_loca locaTable = (val_loca)fontOwner.GetTable("loca");
val_maxp maxpTable = (val_maxp)fontOwner.GetTable("maxp");
if (hmtxTable == null)
{
v.Error(T.OS_2_xAvgCharWidth, E._TEST_E_TableMissing, m_tag, "hmtx");
bRet = false;
}
else if (locaTable == null)
{
v.Error(T.OS_2_xAvgCharWidth, E._TEST_E_TableMissing, m_tag, "loca");
bRet = false;
}
else if (maxpTable == null)
{
v.Error(T.OS_2_xAvgCharWidth, E._TEST_E_TableMissing, m_tag, "maxp");
bRet = false;
}
else
{
if ( version == 3
|| fontOwner.ContainsMsSymbolEncodedCmap())
{
int nTotalWidth = 0;
int nTotalGlyphs = 0;
for (uint iGlyph=0; iGlyph<fontOwner.GetMaxpNumGlyphs(); iGlyph++)
{
Table_hmtx.longHorMetric hm = hmtxTable.GetOrMakeHMetric(iGlyph, fontOwner);
if (hm != null)
{
nTotalWidth += hm.advanceWidth;
// only average non-zero width glyphs
if (hm.advanceWidth > 0)
{
nTotalGlyphs ++;
}
}
}
short CalcAvgWidth = 0;
//.........这里部分代码省略.........
示例8: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.GSUB_Version))
{
if (Version.GetUint() == 0x00010000)
{
v.Pass(T.GSUB_Version, P.GSUB_P_Version, m_tag);
}
else
{
v.Error(T.GSUB_Version, E.GSUB_E_Version, m_tag, "0x" + Version.GetUint().ToString("x8"));
}
}
bool bScriptListOffsetOK = true;
bool bFeatureListOffsetOK = true;
bool bLookupListOffsetOK = true;
if (v.PerformTest(T.GSUB_HeaderOffsets))
{
if (ScriptListOffset == 0)
{
v.Error(T.GSUB_HeaderOffsets, E.GSUB_E_HeaderOffset_0, m_tag, "ScriptListOffset");
bScriptListOffsetOK = false;
bRet = false;
}
else
{
if (ScriptListOffset > m_bufTable.GetLength())
{
v.Error(T.GSUB_HeaderOffsets, E.GSUB_E_HeaderOffset, m_tag, "ScriptListOffset");
bScriptListOffsetOK = false;
bRet = false;
}
}
if (FeatureListOffset == 0)
{
v.Error(T.GSUB_HeaderOffsets, E.GSUB_E_HeaderOffset_0, m_tag, "FeatureListOffset");
bFeatureListOffsetOK = false;
bRet = false;
}
else
{
if (FeatureListOffset > m_bufTable.GetLength())
{
v.Error(T.GSUB_HeaderOffsets, E.GSUB_E_HeaderOffset, m_tag, "FeatureListOffset");
bFeatureListOffsetOK = false;
bRet = false;
}
}
if (LookupListOffset == 0)
{
v.Error(T.GSUB_HeaderOffsets, E.GSUB_E_HeaderOffset_0, m_tag, "LookupListOffset");
bLookupListOffsetOK = false;
bRet = false;
}
else
{
if (LookupListOffset > m_bufTable.GetLength())
{
v.Error(T.GSUB_HeaderOffsets, E.GSUB_E_HeaderOffset, m_tag, "LookupListOffset");
bLookupListOffsetOK = false;
bRet = false;
}
}
if (bScriptListOffsetOK == true && bFeatureListOffsetOK == true && bLookupListOffsetOK == true)
{
v.Pass(T.GSUB_HeaderOffsets, P.GSUB_P_HeaderOffsets, m_tag);
}
}
if (v.PerformTest(T.GSUB_Subtables))
{
if (bScriptListOffsetOK)
{
ScriptListTable_val slt = GetScriptListTable_val();
if (slt != null)
{
bRet &= slt.Validate(v, "ScriptList", this);
}
}
if (bFeatureListOffsetOK)
{
FeatureListTable_val flt = GetFeatureListTable_val();
if (flt != null)
{
//.........这里部分代码省略.........
示例9: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.GDEF_Version))
{
if (Version.GetUint() == 0x00010000 || Version.GetUint() == 0x00010002 )
{
v.Pass(T.GDEF_Version, P.GDEF_P_Version, m_tag, "0x"+ Version.GetUint().ToString("x8"));
}
else
{
v.Error(T.GDEF_Version, E.GDEF_E_Version, m_tag, "0x" + Version.GetUint().ToString("x8"));
}
}
if (v.PerformTest(T.GDEF_HeaderOffsets))
{
bool bOffsetsOk = true;
if (GlyphClassDefOffset != 0)
{
if (GlyphClassDefOffset > m_bufTable.GetLength())
{
v.Error(T.GDEF_HeaderOffsets, E.GDEF_E_HeaderOffset, m_tag, "GlyphClassDef");
bOffsetsOk = false;
bRet = false;
}
}
if (AttachListOffset != 0)
{
if (AttachListOffset > m_bufTable.GetLength())
{
v.Error(T.GDEF_HeaderOffsets, E.GDEF_E_HeaderOffset, m_tag, "AttachList");
bOffsetsOk = false;
bRet = false;
}
}
if (LigCaretListOffset != 0)
{
if (LigCaretListOffset > m_bufTable.GetLength())
{
v.Error(T.GDEF_HeaderOffsets, E.GDEF_E_HeaderOffset, m_tag, "LigCaretList");
bOffsetsOk = false;
bRet = false;
}
}
if (MarkAttachClassDefOffset != 0)
{
if (MarkAttachClassDefOffset > m_bufTable.GetLength())
{
v.Error(T.GDEF_HeaderOffsets, E.GDEF_E_HeaderOffset, m_tag, "MarkAttachClassDef");
bOffsetsOk = false;
bRet = false;
}
}
if (MarkGlyphSetsDefOffset != 0)
{
if (MarkGlyphSetsDefOffset > m_bufTable.GetLength())
{
v.Error(T.GDEF_HeaderOffsets, E.GDEF_E_HeaderOffset, m_tag, "MarkGlyphSetsDef");
bOffsetsOk = false;
bRet = false;
}
}
if (bOffsetsOk == true)
{
v.Pass(T.GDEF_HeaderOffsets, P.GDEF_P_HeaderOffsets, m_tag);
}
}
if (v.PerformTest(T.GDEF_Subtables))
{
if (GlyphClassDefOffset != 0)
{
ClassDefTable_val cdt = GetGlyphClassDefTable_val();
cdt.Validate(v, "GlyphClassDef", this);
}
if (AttachListOffset != 0)
{
AttachListTable_val alt = GetAttachListTable_val();
alt.Validate(v, "AttachList", this);
}
if (LigCaretListOffset != 0)
{
LigCaretListTable_val lclt = GetLigCaretListTable_val();
lclt.Validate(v, "LigCaretList", this);
}
//.........这里部分代码省略.........
示例10: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.LTSH_version))
{
if (version == 0)
{
v.Pass(T.LTSH_version, P.LTSH_P_version, m_tag);
}
else
{
v.Error(T.LTSH_version, E.LTSH_E_version, m_tag, version.ToString());
bRet = false;
}
}
Table_maxp maxpTable = (Table_maxp)fontOwner.GetTable("maxp");
if (maxpTable == null)
{
v.Error(T.T_NULL, E._TEST_E_TableMissing, m_tag, "Unable to test this table, maxp table is invalid or missing");
return false;
}
if (v.PerformTest(T.LTSH_numGlyphs))
{
if (numGlyphs == fontOwner.GetMaxpNumGlyphs())
{
v.Pass(T.LTSH_numGlyphs, P.LTSH_P_numGlyphs, m_tag);
}
else
{
string s = "LTSH.numGlyphs = " + numGlyphs + ", maxp.numGlyphs = " + fontOwner.GetMaxpNumGlyphs();
v.Error(T.LTSH_numGlyphs, E.LTSH_E_numGlyphs, m_tag, s);
bRet = false;
}
}
if (v.PerformTest(T.LTSH_TableLength))
{
uint CalcLength = (uint)FieldOffsets.yPels + numGlyphs;
if (GetLength() == CalcLength)
{
v.Pass(T.LTSH_TableLength, P.LTSH_P_TableLength, m_tag);
}
else
{
string s = "calc length = " + CalcLength + ", actual length = " + GetLength();
v.Error(T.LTSH_TableLength, E.LTSH_E_TableLength, m_tag, s);
bRet = false;
}
}
if (v.PerformTest(T.LTSH_yPels))
{
bool bYPelsOk = true;
RasterInterf.DevMetricsData dmd = null;
try
{
Version ver = fontOwner.GetFile().GetRasterizer().FTVersion;
if ( ver.CompareTo(new Version(2,6,1)) < 0 )
v.Warning(T.LTSH_yPels, W.LTSH_W_Need_Newer_FreeType, m_tag,
"Using FreeType Version " + ver + " may not get correct results for LTSH");
dmd = fontOwner.GetCalculatedDevMetrics();
}
catch (Exception e)
{
v.ApplicationError(T.LTSH_yPels, E._Table_E_Exception, m_tag, e.Message);
bRet = false;
}
if (dmd != null)
{
for( uint iGlyphIndex = 0; iGlyphIndex < numGlyphs; iGlyphIndex++ )
{
if (iGlyphIndex >= fontOwner.GetMaxpNumGlyphs())
{
// JJF. Figure out what to do
v.Warning(T.LTSH_yPels, W._TEST_W_OtherErrorsInTable, m_tag, "can't test all yPel values, LTSH.numGlyphs does not equal maxp.numGlyphs");
bRet = false;
bYPelsOk = false;
break;
}
if( GetYPel(iGlyphIndex) != dmd.ltshData.yPels[iGlyphIndex] )
{
String sDetails = "glyph# = " + iGlyphIndex + ", value = " + GetYPel(iGlyphIndex) + ", calculated value = " + dmd.ltshData.yPels[iGlyphIndex];
v.Error(T.LTSH_yPels, E.LTSH_E_yPels, m_tag, sDetails);
bRet = false;
bYPelsOk = false;
}
/*
else
//.........这里部分代码省略.........
示例11: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.kern_TableVersion))
{
if (version == 0)
{
v.Pass(T.kern_TableVersion, P.kern_P_TableVersion, m_tag);
}
else
{
v.Error(T.kern_TableVersion, E.kern_E_TableVersion, m_tag, "version = " + version.ToString() + ", unrecognized version #, no further tests can be performed");
return false;
}
}
if (v.PerformTest(T.kern_NumSubtables))
{
if (nTables != 0)
{
v.Pass(T.kern_NumSubtables, P.kern_P_NumSubTables, m_tag, nTables.ToString());
}
else
{
v.Error(T.kern_NumSubtables, E.kern_E_NumSubTables, m_tag);
bRet = false;
}
}
if (v.PerformTest(T.kern_SubtableFormats))
{
bool bFormatsOk = true;
for (uint i=0; i<nTables; i++)
{
SubTableHeader sth = GetSubTableHeader(i);
if (sth != null)
{
if (sth.GetFormat() != 0 && sth.GetFormat() != 2)
{
v.Error(T.kern_SubtableFormats, E.kern_E_SubtableFormats, m_tag, "subtable #" + i + ", format " + sth.GetFormat());
bFormatsOk = false;
bRet = false;
}
}
else
{
v.Error(T.kern_SubtableFormats, E.kern_E_SubTableExtendsPastEOT, m_tag, "subtable #" + i );
bFormatsOk = false;
bRet = false;
break;
}
}
if (bFormatsOk)
{
v.Pass(T.kern_SubtableFormats, P.kern_P_SubtableFormats, m_tag);
}
}
if (!bRet)
{
v.Warning(T.kern_SubtableFormats, W._TEST_W_OtherErrorsInTable, m_tag, "kern table appears to be corrupt. No further tests will be performed.");
return bRet;
}
if (v.PerformTest(T.kern_SubtableLength))
{
bool bLengthsOk = true;
for (uint i=0; i<nTables; i++)
{
SubTable st = this.GetSubTable(i);
if (st.length != st.CalculatedLength())
{
v.Error(T.kern_SubtableLength, E.kern_E_SubtableLength, m_tag, "subtable #" + i + ", length = " + st.length + ", calculated length = " + st.CalculatedLength());
bLengthsOk = false;
bRet = false;
}
}
if (bLengthsOk)
{
v.Pass(T.kern_SubtableLength, P.kern_P_SubtableLengths, m_tag);
}
}
if (v.PerformTest(T.kern_CoverageReservedBits))
{
bool bReservedOk = true;
for (uint i=0; i<nTables; i++)
{
//.........这里部分代码省略.........
示例12: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.DSIG_Formats))
{
bool bFormatsOk = true;
for (uint i=0; i<usNumSigs; i++)
{
SigFormatOffset sfo = GetSigFormatOffset(i);
if (sfo.ulFormat != 1)
{
v.Error(T.DSIG_Formats, E.DSIG_E_Formats, m_tag, "block " + i + ", format = " + sfo.ulFormat);
bFormatsOk = false;
bRet = false;
}
}
if (bFormatsOk)
{
v.Pass(T.DSIG_Formats, P.DSIG_P_Formats, m_tag);
}
}
if (v.PerformTest(T.DSIG_Reserved))
{
bool bReservedOk = true;
for (uint i=0; i<usNumSigs; i++)
{
SignatureBlock sb = GetSignatureBlock(i);
if (sb.usReserved1 != 0 || sb.usReserved2 != 0)
{
v.Error(T.DSIG_Reserved, E.DSIG_E_Reserved, m_tag, "block " + i);
bReservedOk = false;
bRet = false;
}
}
if (bReservedOk)
{
v.Pass(T.DSIG_Reserved, P.DSIG_P_Reserved, m_tag);
}
}
if (v.PerformTest(T.DSIG_VerifySignature))
{
OTFile file = fontOwner.GetFile();
System.IO.FileStream fs = file.GetFileStream();
String sFilename = fs.Name;
try {
WinVerifyTrustWrapper wvt = new WinVerifyTrustWrapper();
if (wvt.WinVerifyTrustFile(sFilename))
{
v.Pass(T.DSIG_VerifySignature, P.DSIG_P_VerifySignature, m_tag);
}
else
{
v.Error(T.DSIG_VerifySignature, E.DSIG_E_VerifySignature, m_tag);
bRet = false;
}
}
catch (Exception e)
{
v.Error(T.DSIG_VerifySignature, E.DSIG_E_VerifySignature, m_tag, e.Message);
bRet = false;
}
}
return bRet;
}
示例13: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
Table_hhea hheaTable = (Table_hhea)fontOwner.GetTable("hhea");
if (hheaTable == null)
{
v.Error(T.T_NULL, E._TEST_E_TableMissing, m_tag, "Unable to test this table, hhea table is invalid or missing");
return false;
}
Table_maxp maxpTable = (Table_maxp)fontOwner.GetTable("maxp");
if (maxpTable == null)
{
v.Error(T.T_NULL, E._TEST_E_TableMissing, m_tag, "Unable to test this table, maxp table is invalid or missing");
return false;
}
if (v.PerformTest(T.hmtx_TableSize))
{
uint nhm = GetNumberOfHMetrics(fontOwner);
uint nlsb = GetNumLeftSideBearingEntries(fontOwner);
uint CalcTableLength = nhm*4 + nlsb*2;
if (CalcTableLength == GetLength())
{
v.Pass(T.hmtx_TableSize, P.hmtx_P_TableSize, m_tag);
}
else
{
v.Error(T.hmtx_TableSize, E.hmtx_E_TableSize, m_tag);
bRet = false;
}
}
if (v.PerformTest(T.hmtx_CheckMetrics))
{
bool bMetricsOk = true;
for (uint iGlyph=0; iGlyph<fontOwner.GetMaxpNumGlyphs(); iGlyph++)
{
longHorMetric hm = this.GetOrMakeHMetric(iGlyph, fontOwner);
if (hm != null)
{
if (hm.lsb > hm.advanceWidth)
{
v.Warning(T.hmtx_CheckMetrics, W.hmtx_W_CheckMetrics_lsb_gt_adv, m_tag, "glyph# " + iGlyph);
bMetricsOk = false;
}
}
else
{
// unable to fetch this horizontal metric
// (probably bad hheaTable.numberOfHMetrics or bad table length)
bMetricsOk = false;
}
}
if (bMetricsOk)
{
v.Pass(T.hmtx_CheckMetrics, P.hmtx_P_CheckMetrics, m_tag);
}
}
return bRet;
}
示例14: Validate
public bool Validate(Validator validator, OTFontVal fontOwner)
{
if (validator==null)
return false;
if (validator.PerformTest(T.loca_Format))
{
this.ValidateFormat(validator,fontOwner);
}
if (validator.PerformTest(T.loca_NumEntries))
{
this.ValidateNumEntries(validator,fontOwner);
}
if (validator.PerformTest(T.loca_OffsetsIncreasing))
{
this.ValidateOffsetsIncreasing(validator,fontOwner);
}
if (validator.PerformTest(T.loca_OffsetWithinGlyfRange))
{
this.ValidateOffsetWithinGlyfRange(validator,fontOwner);
}
if (validator.PerformTest(T.loca_GlyfEntryLengthAlignment))
{
this.ValidateGlyfEntryLengthAlignment(validator,fontOwner);
}
if (validator.PerformTest(T.loca_GlyfEntryEmpty))
{
this.ValidateGlyfEntryEmpty(validator,fontOwner);
}
if (validator.PerformTest(T.loca_GlyfPartiallyUnreferenced))
{
this.ValidateGlyfPartiallyUnreferenced(validator,fontOwner);
}
return true;
}
示例15: Validate
/************************
* public methods
*/
public bool Validate(Validator v, OTFontVal fontOwner)
{
bool bRet = true;
if (v.PerformTest(T.hhea_version))
{
if (TableVersionNumber.GetUint() == 0x00010000)
{
v.Pass(T.hhea_version, P.hhea_P_version, m_tag);
}
else
{
v.Error(T.hhea_version, E.hhea_E_version, m_tag, "0x"+TableVersionNumber.GetUint().ToString("x8"));
bRet = false;
}
}
if (v.PerformTest(T.hhea_AscenderPositive))
{
if (Ascender <= 0)
{
string s = "Ascender = " + Ascender;
v.Error(T.hhea_AscenderPositive, E.hhea_E_AscenderPositive, m_tag, s);
bRet = false;
}
else
{
v.Pass(T.hhea_AscenderPositive, P.hhea_P_AscenderPositive, m_tag);
}
}
if (v.PerformTest(T.hhea_DescenderNegative))
{
if (Descender >= 0)
{
string s = "Descender = " + Descender;
v.Error(T.hhea_DescenderNegative, E.hhea_E_DescenderNegative, m_tag, s);
bRet = false;
}
else
{
v.Pass(T.hhea_DescenderNegative, P.hhea_P_DescenderNegative, m_tag);
}
}
Table_head headTable = (Table_head)fontOwner.GetTable("head");
if (headTable != null)
{
if (v.PerformTest(T.hhea_Ascender_yMax))
{
if (Ascender > headTable.yMax)
{
string s = "Ascender = " + Ascender + ", head.yMax = " + headTable.yMax;
v.Info(T.hhea_Ascender_yMax, I.hhea_I_Ascender_yMax, m_tag, s);
// bRet = false;
}
else
{
v.Pass(T.hhea_Ascender_yMax, P.hhea_P_Ascender_yMax, m_tag);
}
}
if (v.PerformTest(T.hhea_Descender_yMin))
{
if (Descender < headTable.yMin)
{
string s = "Descender = " + Descender + ", head.yMin = " + headTable.yMin;
v.Info(T.hhea_Descender_yMin, I.hhea_I_Descender_yMin, m_tag, s);
// bRet = false;
}
else
{
v.Pass(T.hhea_Descender_yMin, P.hhea_P_Descender_yMin, m_tag);
}
}
}
else
{
v.Error(T.hhea_Ascender_yMax, E._TEST_E_TableMissing, m_tag, "head");
bRet = false;
}
if (v.PerformTest(T.hhea_LineGapPositive))
{
if (LineGap < 0)
{
string s = "LineGap = " + LineGap;
v.Warning(T.hhea_LineGapPositive, W.hhea_W_LineGapPositive, m_tag, s);
//bRet = false;
}
else
{
v.Pass(T.hhea_LineGapPositive, P.hhea_P_LineGapPositive, m_tag);
}
//.........这里部分代码省略.........