tyShFromTxt2 Txt2 is more or less a superset of tySh, so this function allows generating the tySh data from a Txt2 hash.
1368{
1369 QVariantHash tySh;
1370
1371 const QVariantHash documentObjects = Txt2.value("/DocumentObjects").toHash();
1372 const QVariantList textObjects = documentObjects.value("/TextObjects").toList();
1373 QVariantHash textObject;
1374 if (textIndex < textObjects.size()) {
1375 textObject = textObjects.value(textIndex).toHash();
1376 }
1377
1378
1379 const QVariantHash model = textObject.value("/Model").toHash();
1380 const QVariantHash view = textObject.value("/View").toHash();
1381
1382 const QVariantHash documentResources = Txt2.value("/DocumentResources").toHash();
1383 const QVariantList textFrames = documentResources.value("/TextFrameSet").toHash().value("/Resources").toList();
1384
1385 QVariantHash engineDict;
1386
1388 editor.insert(
"/Text", model.value(
"/Text"));
1389 engineDict.insert("/Editor", editor);
1390
1391
1393
1394
1395 const QVariantHash para = model.value("/ParagraphRun").toHash();
1396 const QVariantList paraRunArray = para.value("/RunArray").toList();
1397
1398 const int length = paraRunArray.value(0).toHash().value(
"/Length").toInt();
1399 const QVariantHash paraSheet = paraRunArray.value(0).toHash().value("/RunData").toHash()["/ParagraphSheet"].toHash();
1401 QVariantHash paragraphRun;
1402 paragraphRun[
"/RunLengthArray"] = QVariantList({QVariant(
length)});
1403 QVariantHash paragraphAdjustments = QVariantHash {
1404 {"/Axis", QVariantList({1.0, 0.0, 1.0})},
1405 {"/XY", QVariantList({0.0, 0.0})}
1406 };
1407 paragraphRun["/RunArray"] = QVariantList({ QVariantHash{
1408 {"/ParagraphSheet", paragraphStyle},
1409 {"/Adjustments", paragraphAdjustments}
1410 }
1411 });
1412 paragraphRun.insert("/IsJoinable", 1);
1413 paragraphRun.insert("/DefaultRunData", QVariantHash{
1414 {"/ParagraphSheet",
1415 QVariantHash{{"/DefaultStyleSheet", 0},
1416 {"/Properties", QVariantHash()}} },
1417 {"/Adjustments", paragraphAdjustments}});
1418
1419 engineDict.insert("/ParagraphRun", paragraphRun);
1420
1421 const QVariantHash txt2StyleRun = model.value("/StyleRun").toHash();
1422 const QVariantList txt2RunArray = txt2StyleRun.value("/RunArray").toList();
1423 QVariantHash styleRun;
1424
1425 QVariantList properStyleRun;
1426 QVariantList styleRunArray;
1427 Q_FOREACH(const QVariant entry, txt2RunArray) {
1428 QVariantHash properStyle;
1429 const QVariantHash fea = entry.toHash().value("/RunData").toHash().value("/StyleSheet").toHash().value("/Features").toHash();
1431 QVariantHash s;
1432 s.insert("/StyleSheet", properStyle);
1433 properStyleRun.append(s);
1434 styleRunArray.append(entry.toHash().value("/Length").toInt());
1435 }
1436 styleRun.insert("/RunArray", properStyleRun);
1437 styleRun.insert("/RunLengthArray", styleRunArray);
1438 styleRun.insert("/IsJoinable", 2);
1439
1440 styleRun.insert("/DefaultRunData", QVariantHash{{"/StyleSheet", QVariantHash{{"/StyleSheetData", QVariantHash()}} }});
1441 engineDict.insert("/StyleRun", styleRun);
1442
1443
1444 const int frameIndex = view.value("/Frames").toList().value(0).toHash().value("/Resource").toInt();
1445 const QVariantHash textFrame = textFrames.value(frameIndex).toHash().value("/Resource").toHash();
1446 const QVariantHash textFrameData = textFrame.value("/Data").toHash();
1447 QVariantHash rendered;
1448 int shapeType = textFrameData.value(
"/Type", QVariant(0)).
toInt();
1449 int writingDirection = textFrameData.value(
"/LineOrientation", QVariant(0)).
toInt();
1450 QVariantHash photoshop = QVariantHash {{"/ShapeType", qMax(1, shapeType)},
1451 {"/TransformPoint0", QVariantList({1.0, 0.0})},
1452 {"/TransformPoint1", QVariantList({0.0, 1.0})},
1453 {"/TransformPoint2", QVariantList({0.0, 0.0})}};
1454 if (shapeType == 0) {
1455 photoshop["/PointBase"] = QVariantList({0.0, 0.0});
1456 } else if (shapeType == 1) {
1457
1458 photoshop["/BoxBounds"] = QVariantList({0.0, 0.0, boundsInPx.width(), boundsInPx.height()});
1459 }
1460 QVariantHash renderChild = QVariantHash{
1461 {"/ShapeType", shapeType},
1462 {"/Procession", 0},
1463 {"/Lines", QVariantHash{{"/WritingDirection", writingDirection}, {"/Children", QVariantList()}}},
1464 {"/Cookie", QVariantHash{{"/Photoshop", photoshop}}}};
1465 rendered["/Version"] = 1;
1466 rendered["/Shapes"] = QVariantHash{{"/WritingDirection", writingDirection}, {"/Children", QVariantList({renderChild})}};
1467
1468 engineDict.insert("/Rendered", rendered);
1469
1470
1471 const QVariantHash storySheet = textObject.value("/StorySheet").toHash();
1472 engineDict.insert("/UseFractionalGlyphWidths", storySheet.value("/UseFractionalGlyphWidths", QVariant(true)).toBool());
1473 engineDict.insert(
"/AntiAlias", storySheet.value(
"/AntiAlias", QVariant(1)).
toInt());
1474
1475 QVariantHash resourceDict;
1476
1477 const QVariantList docFontSet = documentResources.value("/FontSet").toHash().value("/Resources").toList();
1478 QVariantList fontSet;
1479 Q_FOREACH(QVariant entry, docFontSet) {
1480 const QVariantHash docFont = entry.toHash().value("/Resource").toHash();
1481 QVariantHash font = docFont.value("/Identifier").toHash();
1482 font.insert("/FontType", font.value("/Type"));
1483 font.remove("/Version");
1484 font.remove("/Type");
1485 font.insert("/Script", 0);
1486 font.insert("/Synthetic", 0);
1487 fontSet.append(font);
1488 }
1489 resourceDict.insert("/FontSet", fontSet);
1490
1491 const QVariantHash documentSettings = documentObjects.value("/DocumentSettings").toHash();
1492
1494 kinHard.remove("/PredefinedTag");
1495 kinHard.insert("/Name", "PhotoshopKinsokuHard");
1497 kinSoft.remove("/PredefinedTag");
1498 kinSoft.insert("/Name", "PhotoshopKinsokuSoft");
1499 resourceDict.insert("/KinsokuSet", QVariantList({kinHard, kinSoft}));
1500 resourceDict.insert("/MojiKumiSet", QVariantList( {QVariantHash{{"/InternalName", "Photoshop6MojiKumiSet1"}},
1501 QVariantHash{{"/InternalName", "Photoshop6MojiKumiSet2"}},
1502 QVariantHash{{"/InternalName", "Photoshop6MojiKumiSet3"}},
1503 QVariantHash{{"/InternalName", "Photoshop6MojiKumiSet4"}}
1504 }));
1505 resourceDict.insert("/SubscriptPosition", documentSettings.value("/SubscriptPosition"));
1506 resourceDict.insert("/SubscriptSize", documentSettings.value("/SubscriptSize"));
1507 resourceDict.insert("/SuperscriptPosition", documentSettings.value("/SuperscriptPosition"));
1508 resourceDict.insert("/SuperscriptSize", documentSettings.value("/SuperscriptSize"));
1509 resourceDict.insert("/SmallCapSize", documentSettings.value("/SmallCapSize"));
1510 resourceDict.insert("/TheNormalParagraphSheet", documentSettings.value("/NormalParagraphSheet"));
1511 resourceDict.insert("/TheNormalStyleSheet", documentSettings.value("/NormalStyleSheet"));
1512
1513 const QVariantList docStyleSheetSets = documentResources.value("/StyleSheetSet").toHash().value("/Resources").toList();
1514 QVariantList resourceStyleSheetList;
1515 Q_FOREACH(QVariant entry, docStyleSheetSets) {
1516 const QVariantHash styleSheet = entry.toHash().value("/Resource").toHash();
1517 QVariantHash newSheet;
1518 newSheet.insert("/Name", styleSheet.value("/Name"));
1519 newSheet.insert(
"/StyleSheetData",
simplifyStyleSheet(styleSheet.value(
"/Features").toHash()));
1520 resourceStyleSheetList.append(newSheet);
1521 }
1522
1523 const QVariantList docParagraphSheetSets = documentResources.value("/ParagraphSheetSet").toHash().value("/Resources").toList();
1524 QVariantList resourceParagraphSheetList;
1525 Q_FOREACH(QVariant entry, docParagraphSheetSets) {
1526 const QVariantHash styleSheet = entry.toHash().value("/Resource").toHash();
1527 QVariantHash newSheet;
1528 newSheet.insert("/Name", styleSheet.value("/Name"));
1530 newSheet.insert("/DefaultStyleSheet", 0);
1531 resourceParagraphSheetList.append(newSheet);
1532 }
1533
1534 resourceDict.insert("/StyleSheetSet", resourceStyleSheetList);
1535 resourceDict.insert("/ParagraphSheetSet", resourceParagraphSheetList);
1536
1537 tySh.insert("/EngineDict", engineDict);
1538 tySh.insert("/DocumentResources", resourceDict);
1539 tySh.insert("/ResourceDict", resourceDict);
1540 return tySh;
1541}
qreal length(const QPointF &vec)
static QVariantHash simplifyParagraphSheet(const QVariantHash complex)
static QVariantHash simplifyStyleSheet(const QVariantHash complex)
int toInt(const QString &str, bool *ok=nullptr)