DviSpecialType TpicArcSpecialImpl::Parse () { m_bOutline = (strncmp(GetXXX(), "ar", 2) == 0); if (sscanf_s(GetXXX() + 2, " %d %d %d %d %f %f", &cx, &cy, &m_rx, &m_ry, &m_s, &m_e) != 6) { trace_error->WriteLine ("libdvi", T_("bad ar special")); return (DviSpecialType::Unknown); } return (DviSpecialType::Tpic); }
DviSpecialType SourceSpecialImpl::Parse() { static atomic_long nextid = 1; id = nextid++; const char* lpsz = GetXXX() + 4; // src: while (*lpsz == ' ') { ++lpsz; } if (*lpsz != 0 && isdigit(*lpsz)) { char* fileName; lineNum = strtol(lpsz, &fileName, 10); if (fileName != nullptr) { while (*fileName == ' ') { ++fileName; } if (*fileName != 0) { this->fileName = fileName; } } } return DviSpecialType::Source; }
DviSpecialType SourceSpecialImpl::Parse () { static LONG volatile nextid = 1; id = InterlockedIncrement(&nextid); const char * lpsz = GetXXX() + 4; // src: while (*lpsz == ' ') { ++ lpsz; } if (*lpsz != 0 && isdigit(*lpsz)) { char * lpszFileName; lineNum = strtol(lpsz, &lpszFileName, 10); if (lpszFileName != 0) { while (*lpszFileName == ' ') { ++ lpszFileName; } if (*lpszFileName != 0) { fileName = lpszFileName; } } } return (DviSpecialType::Source); }
DviSpecialType PsdefSpecialImpl::Parse() { const char* lpsz = GetXXX(); if (strncmp(GetXXX(), "header=", 7) == 0) { isFileName = true; lpsz += 7; } else { isFileName = false; lpsz += 1; // ! } while (*lpsz) { str += *lpsz++; } return DviSpecialType::Psdef; }
DviSpecialType TpicPolySpecialImpl::Parse () { m_outline = OutlineStyle::Solid; m_length = 0; m_bSpline = false; if (strncmp(GetXXX(), "ip", 2) == 0) { m_outline = OutlineStyle::None; } else if (strncmp(GetXXX(), "da", 2) == 0) { if (sscanf_s(GetXXX(), "da %f", &m_length) != 1) { trace_error->WriteLine ("libdvi", T_("bad da special")); } else { m_outline = OutlineStyle::Dashes; } } else if (strncmp(GetXXX(), "dt", 2) == 0) { if (sscanf_s(GetXXX(), "dt %f", &m_length) != 1) { trace_error->WriteLine ("libdvi", T_("bad dt special")); } else { m_outline = OutlineStyle::Dots; } } else if (strncmp(GetXXX(), "sp", 2) == 0) { m_bSpline = true; if (sscanf_s(GetXXX(), "sp %f", &m_length) == 1) { if (m_length > 0) { m_outline = OutlineStyle::Dashes; } else if (m_length < 0) { m_length *= -1; m_outline = OutlineStyle::Dots; } } } return (DviSpecialType::Tpic); }
DviSpecialType DvipsSpecialImpl::Parse() { protection = false; isFileName = false; const char* lpsz = GetXXX(); if (*lpsz == '"') { lpsz += 1; protection = true; } else if (strncmp(lpsz, "ps:", 3) == 0) { if (strncmp(GetXXX(), "ps::[begin]", 11) == 0) { lpsz += 11; } else if (strncmp(GetXXX(), "ps::[end]", 9) == 0) { lpsz += 9; } else if (strncmp(GetXXX(), "ps::", 4) == 0) { lpsz += 4; } else { lpsz += 3; const char* lpsz2 = lpsz; while (*lpsz2 && isspace(*lpsz2)) { ++lpsz2; } if (strncmp(lpsz2, "plotfile", 8) == 0) { lpsz2 += 8; while (*lpsz2 && isspace(*lpsz2)) { ++lpsz2; } while (*lpsz2 && !isspace(*lpsz2)) { str += *lpsz2++; } if (str.length() == 0) { trace_error->WriteLine("libdvi", T_("bad ps: plotfile special")); } else { isFileName = true; } return DviSpecialType::Ps; } } } while (*lpsz != 0) { str += *lpsz++; } return DviSpecialType::Ps; }
DviSpecialType PsfileSpecialImpl::Parse() { hSize = 0; vSize = 0; hOffset = 0; vOffset = 0; hScale = 100; vScale = 100; angle = 0; llx = 0; lly = 0; urx = 0; ury = 0; rwi = 0; rhi = 0; isClipped = false; hasHSize = false; hasVSize = false; hasHOffset = false; hasVOffset = false; hasHSale = false; hasVScale = false; hasAngle = false; hasLlx = false; hasLLy = false; hasUrx = false; hasUry = false; hasRwi = false; hasRhi = false; hasClipFlag = false; CharBuffer<char> autoBuffer(specialString.length() + 1); char* specialSpec = autoBuffer.GetData(); strcpy_s(specialSpec, specialString.length() + 1, GetXXX()); pair<char*, char*> keyVal; while (*specialSpec && getkv(specialSpec, keyVal)) { if (_strcmpi(keyVal.first, "psfile") == 0) { if (keyVal.second != nullptr) { fileName = keyVal.second; } } else if (_strcmpi(keyVal.first, "hsize") == 0) { if (keyVal.second != nullptr) { hSize = atoi(keyVal.second); hasHSize = true; } } else if (_strcmpi(keyVal.first, "vsize") == 0) { if (keyVal.second != nullptr) { vSize = atoi(keyVal.second); hasVSize = true; } } else if (_strcmpi(keyVal.first, "hoffset") == 0) { if (keyVal.second != nullptr) { hOffset = atoi(keyVal.second); hasHOffset = true; } } else if (_strcmpi(keyVal.first, "voffset") == 0) { if (keyVal.second != nullptr) { vOffset = atoi(keyVal.second); hasVOffset = true; } } else if (_strcmpi(keyVal.first, "hscale") == 0) { if (keyVal.second != nullptr) { hScale = atoi(keyVal.second); hasHSale = true; } } else if (_strcmpi(keyVal.first, "vscale") == 0) { if (keyVal.second != nullptr) { vScale = atoi(keyVal.second); hasVScale = true; } } else if (_strcmpi(keyVal.first, "angle") == 0) { if (keyVal.second != nullptr) { angle = atoi(keyVal.second); hasAngle = true; } } else if (_strcmpi(keyVal.first, "llx") == 0) { if (keyVal.second != nullptr) { llx = atoi(keyVal.second); hasLlx = true; } } else if (_strcmpi(keyVal.first, "lly") == 0) { if (keyVal.second != nullptr) { lly = atoi(keyVal.second); hasLLy = true; } } else if (_strcmpi(keyVal.first, "urx") == 0) { if (keyVal.second != nullptr) { urx = atoi(keyVal.second); hasUrx = true; } } else if (_strcmpi(keyVal.first, "ury") == 0) { if (keyVal.second != nullptr) { ury = atoi(keyVal.second); hasUry = true; } } else if (_strcmpi(keyVal.first, "rwi") == 0) { if (keyVal.second != nullptr) { rwi = atoi(keyVal.second); hasRwi = true; } } else if (_strcmpi(keyVal.first, "rhi") == 0) { if (keyVal.second != nullptr) { rhi = atoi(keyVal.second); hasRhi = true; } } else if (_strcmpi(keyVal.first, "clip") == 0) { isClipped = true; hasClipFlag = true; } } return DviSpecialType::Psfile; }