public void Init(InputMeta meta) { height = Math.Abs(meta.ReadShort()); meta.Skip(2); angle = (float)(meta.ReadShort() / 1800.0 * Math.PI); meta.Skip(2); bold = (meta.ReadShort() >= BOLDTHRESHOLD ? MARKER_BOLD : 0); italic = (meta.ReadByte() != 0 ? MARKER_ITALIC : 0); underline = (meta.ReadByte() != 0); strikeout = (meta.ReadByte() != 0); charset = meta.ReadByte(); meta.Skip(3); pitchAndFamily = meta.ReadByte(); byte[] name = new byte[nameSize]; int k; for (k = 0; k < nameSize; ++k) { int c = meta.ReadByte(); if (c == 0) { break; } name[k] = (byte)c; } try { faceName = EncodingsCatalog.GetEncoding(1252).GetString(name, 0, k); } catch { faceName = System.Text.ASCIIEncoding.ASCII.GetString(name, 0, k); } faceName = faceName.ToLower(System.Globalization.CultureInfo.InvariantCulture); }
public static Encoding GetEncodingEncoding(string name) { String nameU = name.ToUpper(System.Globalization.CultureInfo.InvariantCulture); if (nameU.Equals("UNICODEBIGUNMARKED")) { return(new UnicodeEncoding(true, false)); } if (nameU.Equals("UNICODEBIG")) { return(new UnicodeEncoding(true, true)); } if (nameU.Equals("UNICODELITTLEUNMARKED")) { return(new UnicodeEncoding(false, false)); } if (nameU.Equals("UNICODELITTLE")) { return(new UnicodeEncoding(false, true)); } if (map.ContainsKey(nameU)) { return(EncodingsCatalog.GetEncoding((int)map[nameU])); } else { return(EncodingsCatalog.GetEncoding(name)); } }
/** Gets the field value or <CODE>null</CODE> if the field does not * exist or has no value defined. * @param name the fully qualified field name * @return the field value or <CODE>null</CODE> */ public String GetFieldValue(String name) { PdfDictionary field = (PdfDictionary)fields[name]; if (field == null) { return(null); } PdfObject v = GetPdfObject(field.Get(PdfName.V)); if (v == null) { return(null); } if (v.IsName()) { return(PdfName.DecodeName(((PdfName)v).ToString())); } else if (v.IsString()) { PdfString vs = (PdfString)v; if (encoding == null || vs.Encoding != null) { return(vs.ToUnicodeString()); } byte[] b = vs.GetBytes(); if (b.Length >= 2 && b[0] == (byte)254 && b[1] == (byte)255) { return(vs.ToUnicodeString()); } try { if (encoding.Equals(PdfName.SHIFT_JIS)) { return(EncodingsCatalog.GetEncoding(932).GetString(b)); } else if (encoding.Equals(PdfName.UHC)) { return(EncodingsCatalog.GetEncoding(949).GetString(b)); } else if (encoding.Equals(PdfName.GBK)) { return(EncodingsCatalog.GetEncoding(936).GetString(b)); } else if (encoding.Equals(PdfName.BIGFIVE)) { return(EncodingsCatalog.GetEncoding(950).GetString(b)); } } catch { } return(vs.ToUnicodeString()); } return(null); }
/** * Parses the XML document firing the events to the handler. * @param doc the document handler * @param in the document. The encoding is deduced from the stream. The stream is not closed * @throws IOException on error */ public static void Parse(ISimpleXMLDocHandler doc, Stream inp) { byte[] b4 = new byte[4]; int count = inp.Read(b4, 0, b4.Length); if (count != 4) { throw new IOException("Insufficient length."); } String encoding = GetEncodingName(b4); String decl = null; if (encoding.Equals("UTF-8")) { StringBuilder sb = new StringBuilder(); int c; while ((c = inp.ReadByte()) != -1) { if (c == '>') { break; } sb.Append((char)c); } decl = sb.ToString(); } else if (encoding.Equals("CP037")) { MemoryStream bi = new MemoryStream(); int c; while ((c = inp.ReadByte()) != -1) { if (c == 0x6e) // that's '>' in ebcdic { break; } bi.WriteByte((byte)c); } decl = EncodingsCatalog.GetEncoding(37).GetString(bi.ToArray());//cp037 ebcdic } if (decl != null) { decl = GetDeclaredEncoding(decl); if (decl != null) { encoding = decl; } } Parse(doc, new StreamReader(inp, IanaEncodings.GetEncodingEncoding(encoding))); }
public void Load(Stream inStream) { StreamReader inp = new StreamReader(inStream, EncodingsCatalog.GetEncoding(1252)); while (true) { // Get next line String line = inp.ReadLine(); if (line == null) { return; } if (line.Length > 0) { // Find start of key int len = line.Length; int keyStart; for (keyStart = 0; keyStart < len; keyStart++) { if (whiteSpaceChars.IndexOf(line[keyStart]) == -1) { break; } } // Blank lines are ignored if (keyStart == len) { continue; } // Continue lines that end in slashes if they are not comments char firstChar = line[keyStart]; if ((firstChar != '#') && (firstChar != '!')) { while (ContinueLine(line)) { String nextLine = inp.ReadLine(); if (nextLine == null) { nextLine = ""; } String loppedLine = line.Substring(0, len - 1); // Advance beyond whitespace on new line int startIndex; for (startIndex = 0; startIndex < nextLine.Length; startIndex++) { if (whiteSpaceChars.IndexOf(nextLine[startIndex]) == -1) { break; } } nextLine = nextLine.Substring(startIndex, nextLine.Length - startIndex); line = loppedLine + nextLine; len = line.Length; } // Find separation between key and value int separatorIndex; for (separatorIndex = keyStart; separatorIndex < len; separatorIndex++) { char currentChar = line[separatorIndex]; if (currentChar == '\\') { separatorIndex++; } else if (keyValueSeparators.IndexOf(currentChar) != -1) { break; } } // Skip over whitespace after key if any int valueIndex; for (valueIndex = separatorIndex; valueIndex < len; valueIndex++) { if (whiteSpaceChars.IndexOf(line[valueIndex]) == -1) { break; } } // Skip over one non whitespace key value separators if any if (valueIndex < len) { if (strictKeyValueSeparators.IndexOf(line[valueIndex]) != -1) { valueIndex++; } } // Skip over white space after other separators if any while (valueIndex < len) { if (whiteSpaceChars.IndexOf(line[valueIndex]) == -1) { break; } valueIndex++; } String key = line.Substring(keyStart, separatorIndex - keyStart); String value = (separatorIndex < len) ? line.Substring(valueIndex, len - valueIndex) : ""; // Convert then store key and value key = LoadConvert(key); value = LoadConvert(value); Add(key, value); } } } }
public void ReadAll() { if (meta.ReadInt() != unchecked ((int)0x9AC6CDD7)) { throw new DocumentException("Not a placeable windows metafile"); } meta.ReadWord(); left = meta.ReadShort(); top = meta.ReadShort(); right = meta.ReadShort(); bottom = meta.ReadShort(); inch = meta.ReadWord(); state.ScalingX = (float)(right - left) / (float)inch * 72f; state.ScalingY = (float)(bottom - top) / (float)inch * 72f; state.OffsetWx = left; state.OffsetWy = top; state.ExtentWx = right - left; state.ExtentWy = bottom - top; meta.ReadInt(); meta.ReadWord(); meta.Skip(18); int tsize; int function; cb.SetLineCap(1); cb.SetLineJoin(1); for (;;) { int lenMarker = meta.Length; tsize = meta.ReadInt(); if (tsize < 3) { break; } function = meta.ReadWord(); switch (function) { case 0: break; case META_CREATEPALETTE: case META_CREATEREGION: case META_DIBCREATEPATTERNBRUSH: state.AddMetaObject(new MetaObject()); break; case META_CREATEPENINDIRECT: { MetaPen pen = new MetaPen(); pen.Init(meta); state.AddMetaObject(pen); break; } case META_CREATEBRUSHINDIRECT: { MetaBrush brush = new MetaBrush(); brush.Init(meta); state.AddMetaObject(brush); break; } case META_CREATEFONTINDIRECT: { MetaFont font = new MetaFont(); font.Init(meta); state.AddMetaObject(font); break; } case META_SELECTOBJECT: { int idx = meta.ReadWord(); state.SelectMetaObject(idx, cb); break; } case META_DELETEOBJECT: { int idx = meta.ReadWord(); state.DeleteMetaObject(idx); break; } case META_SAVEDC: state.SaveState(cb); break; case META_RESTOREDC: { int idx = meta.ReadShort(); state.RestoreState(idx, cb); break; } case META_SETWINDOWORG: state.OffsetWy = meta.ReadShort(); state.OffsetWx = meta.ReadShort(); break; case META_SETWINDOWEXT: state.ExtentWy = meta.ReadShort(); state.ExtentWx = meta.ReadShort(); break; case META_MOVETO: { int y = meta.ReadShort(); System.Drawing.Point p = new System.Drawing.Point(meta.ReadShort(), y); state.CurrentPoint = p; break; } case META_LINETO: { int y = meta.ReadShort(); int x = meta.ReadShort(); System.Drawing.Point p = state.CurrentPoint; cb.MoveTo(state.TransformX(p.X), state.TransformY(p.Y)); cb.LineTo(state.TransformX(x), state.TransformY(y)); cb.Stroke(); state.CurrentPoint = new System.Drawing.Point(x, y); break; } case META_POLYLINE: { state.LineJoinPolygon = cb; int len = meta.ReadWord(); int x = meta.ReadShort(); int y = meta.ReadShort(); cb.MoveTo(state.TransformX(x), state.TransformY(y)); for (int k = 1; k < len; ++k) { x = meta.ReadShort(); y = meta.ReadShort(); cb.LineTo(state.TransformX(x), state.TransformY(y)); } cb.Stroke(); break; } case META_POLYGON: { if (IsNullStrokeFill(false)) { break; } int len = meta.ReadWord(); int sx = meta.ReadShort(); int sy = meta.ReadShort(); cb.MoveTo(state.TransformX(sx), state.TransformY(sy)); for (int k = 1; k < len; ++k) { int x = meta.ReadShort(); int y = meta.ReadShort(); cb.LineTo(state.TransformX(x), state.TransformY(y)); } cb.LineTo(state.TransformX(sx), state.TransformY(sy)); StrokeAndFill(); break; } case META_POLYPOLYGON: { if (IsNullStrokeFill(false)) { break; } int numPoly = meta.ReadWord(); int[] lens = new int[numPoly]; for (int k = 0; k < lens.Length; ++k) { lens[k] = meta.ReadWord(); } for (int j = 0; j < lens.Length; ++j) { int len = lens[j]; int sx = meta.ReadShort(); int sy = meta.ReadShort(); cb.MoveTo(state.TransformX(sx), state.TransformY(sy)); for (int k = 1; k < len; ++k) { int x = meta.ReadShort(); int y = meta.ReadShort(); cb.LineTo(state.TransformX(x), state.TransformY(y)); } cb.LineTo(state.TransformX(sx), state.TransformY(sy)); } StrokeAndFill(); break; } case META_ELLIPSE: { if (IsNullStrokeFill(state.LineNeutral)) { break; } int b = meta.ReadShort(); int r = meta.ReadShort(); int t = meta.ReadShort(); int l = meta.ReadShort(); cb.Arc(state.TransformX(l), state.TransformY(b), state.TransformX(r), state.TransformY(t), 0, 360); StrokeAndFill(); break; } case META_ARC: { if (IsNullStrokeFill(state.LineNeutral)) { break; } float yend = state.TransformY(meta.ReadShort()); float xend = state.TransformX(meta.ReadShort()); float ystart = state.TransformY(meta.ReadShort()); float xstart = state.TransformX(meta.ReadShort()); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = GetArc(cx, cy, xstart, ystart); float arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } cb.Arc(l, b, r, t, arc1, arc2); cb.Stroke(); break; } case META_PIE: { if (IsNullStrokeFill(state.LineNeutral)) { break; } float yend = state.TransformY(meta.ReadShort()); float xend = state.TransformX(meta.ReadShort()); float ystart = state.TransformY(meta.ReadShort()); float xstart = state.TransformX(meta.ReadShort()); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = GetArc(cx, cy, xstart, ystart); float arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } ArrayList ar = PdfContentByte.BezierArc(l, b, r, t, arc1, arc2); if (ar.Count == 0) { break; } float[] pt = (float [])ar[0]; cb.MoveTo(cx, cy); cb.LineTo(pt[0], pt[1]); for (int k = 0; k < ar.Count; ++k) { pt = (float [])ar[k]; cb.CurveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } cb.LineTo(cx, cy); StrokeAndFill(); break; } case META_CHORD: { if (IsNullStrokeFill(state.LineNeutral)) { break; } float yend = state.TransformY(meta.ReadShort()); float xend = state.TransformX(meta.ReadShort()); float ystart = state.TransformY(meta.ReadShort()); float xstart = state.TransformX(meta.ReadShort()); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); float cx = (r + l) / 2; float cy = (t + b) / 2; float arc1 = GetArc(cx, cy, xstart, ystart); float arc2 = GetArc(cx, cy, xend, yend); arc2 -= arc1; if (arc2 <= 0) { arc2 += 360; } ArrayList ar = PdfContentByte.BezierArc(l, b, r, t, arc1, arc2); if (ar.Count == 0) { break; } float[] pt = (float [])ar[0]; cx = pt[0]; cy = pt[1]; cb.MoveTo(cx, cy); for (int k = 0; k < ar.Count; ++k) { pt = (float [])ar[k]; cb.CurveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); } cb.LineTo(cx, cy); StrokeAndFill(); break; } case META_RECTANGLE: { if (IsNullStrokeFill(true)) { break; } float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); cb.Rectangle(l, b, r - l, t - b); StrokeAndFill(); break; } case META_ROUNDRECT: { if (IsNullStrokeFill(true)) { break; } float h = state.TransformY(0) - state.TransformY(meta.ReadShort()); float w = state.TransformX(meta.ReadShort()) - state.TransformX(0); float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); cb.RoundRectangle(l, b, r - l, t - b, (h + w) / 4); StrokeAndFill(); break; } case META_INTERSECTCLIPRECT: { float b = state.TransformY(meta.ReadShort()); float r = state.TransformX(meta.ReadShort()); float t = state.TransformY(meta.ReadShort()); float l = state.TransformX(meta.ReadShort()); cb.Rectangle(l, b, r - l, t - b); cb.EoClip(); cb.NewPath(); break; } case META_EXTTEXTOUT: { int y = meta.ReadShort(); int x = meta.ReadShort(); int count = meta.ReadWord(); int flag = meta.ReadWord(); int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; if ((flag & (MetaFont.ETO_CLIPPED | MetaFont.ETO_OPAQUE)) != 0) { x1 = meta.ReadShort(); y1 = meta.ReadShort(); x2 = meta.ReadShort(); y2 = meta.ReadShort(); } byte[] text = new byte[count]; int k; for (k = 0; k < count; ++k) { byte c = (byte)meta.ReadByte(); if (c == 0) { break; } text[k] = c; } string s; try { s = EncodingsCatalog.GetEncoding(1252).GetString(text, 0, k); } catch { s = System.Text.ASCIIEncoding.ASCII.GetString(text, 0, k); } OutputText(x, y, flag, x1, y1, x2, y2, s); break; } case META_TEXTOUT: { int count = meta.ReadWord(); byte[] text = new byte[count]; int k; for (k = 0; k < count; ++k) { byte c = (byte)meta.ReadByte(); if (c == 0) { break; } text[k] = c; } string s; try { s = EncodingsCatalog.GetEncoding(1252).GetString(text, 0, k); } catch { s = System.Text.ASCIIEncoding.ASCII.GetString(text, 0, k); } count = (count + 1) & 0xfffe; meta.Skip(count - k); int y = meta.ReadShort(); int x = meta.ReadShort(); OutputText(x, y, 0, 0, 0, 0, 0, s); break; } case META_SETBKCOLOR: state.CurrentBackgroundColor = meta.ReadColor(); break; case META_SETTEXTCOLOR: state.CurrentTextColor = meta.ReadColor(); break; case META_SETTEXTALIGN: state.TextAlign = meta.ReadWord(); break; case META_SETBKMODE: state.BackgroundMode = meta.ReadWord(); break; case META_SETPOLYFILLMODE: state.PolyFillMode = meta.ReadWord(); break; case META_SETPIXEL: { Color color = meta.ReadColor(); int y = meta.ReadShort(); int x = meta.ReadShort(); cb.SaveState(); cb.SetColorFill(color); cb.Rectangle(state.TransformX(x), state.TransformY(y), .2f, .2f); cb.Fill(); cb.RestoreState(); break; } case META_DIBSTRETCHBLT: case META_STRETCHDIB: { int rop = meta.ReadInt(); if (function == META_STRETCHDIB) { /*int usage = */ meta.ReadWord(); } int srcHeight = meta.ReadShort(); int srcWidth = meta.ReadShort(); int ySrc = meta.ReadShort(); int xSrc = meta.ReadShort(); float destHeight = state.TransformY(meta.ReadShort()) - state.TransformY(0); float destWidth = state.TransformX(meta.ReadShort()) - state.TransformX(0); float yDest = state.TransformY(meta.ReadShort()); float xDest = state.TransformX(meta.ReadShort()); byte[] b = new byte[(tsize * 2) - (meta.Length - lenMarker)]; for (int k = 0; k < b.Length; ++k) { b[k] = (byte)meta.ReadByte(); } try { MemoryStream inb = new MemoryStream(b); Image bmp = BmpImage.GetImage(inb, true, b.Length); cb.SaveState(); cb.Rectangle(xDest, yDest, destWidth, destHeight); cb.Clip(); cb.NewPath(); bmp.ScaleAbsolute(destWidth * bmp.Width / srcWidth, -destHeight * bmp.Height / srcHeight); bmp.SetAbsolutePosition(xDest - destWidth * xSrc / srcWidth, yDest + destHeight * ySrc / srcHeight - bmp.ScaledHeight); cb.AddImage(bmp); cb.RestoreState(); } catch { // empty on purpose } break; } } meta.Skip((tsize * 2) - (meta.Length - lenMarker)); } state.Cleanup(cb); }
/** Reads a <CODE>string</CODE> from the font file as bytes using the Cp1252 * encoding. * @param length the length of bytes to read * @return the <CODE>string</CODE> read * @throws IOException the font file could not be read */ protected string ReadStandardString(int length) { byte[] buf = new byte[length]; rf.ReadFully(buf); return(EncodingsCatalog.GetEncoding(1252).GetString(buf)); }
public void GetEncodingByName_returnsEncoding(string name) { var encoding = EncodingsCatalog.GetEncoding(name); Assert.NotNull(encoding); }
public void GetEncodingByCodePage_returnsEncoding(int codepage) { var encoding = EncodingsCatalog.GetEncoding(codepage); Assert.Equal(codepage, encoding.CodePage); }
/** Creates a new instance of Pfm2afm */ private Pfm2afm(RandomAccessFileOrArray inp, Stream outp) { this.inp = inp; encoding = EncodingsCatalog.GetEncoding(1252); this.outp = new StreamWriter(outp, encoding); }