Clarify some documentation slightly.
authorCarl Hetherington <cth@carlh.net>
Sun, 9 Jun 2024 23:04:16 +0000 (01:04 +0200)
committerCarl Hetherington <cth@carlh.net>
Mon, 10 Jun 2024 19:38:48 +0000 (21:38 +0200)
doc/design/fonts
doc/design/fonts.svg [new file with mode: 0644]

index c431d52e9b343d406ba19c729be4f3612eb39e5c..5d61f71a32f44cbf9f93a4b5c5d4e949ba0a4de2 100644 (file)
@@ -47,13 +47,24 @@ Passes subtitles through.
 
 * Writer
 
-Gets all fonts, puts them in the font ID map using the font's original ID.  This is OK because we
-don't need uniqueness in the DCP any more.
+Gets all fonts, puts them in the FontIDMap using the font's re-written ID.
 
 
 * Reel Writer
 
-Gets subtitles, uses font ID map to find the ID from the Font C++ object pointer.  Puts this ID in
+Gets subtitles, uses FontIDMap to find the ID from the Font C++ object pointer.  Puts this ID in
 the font and writes it to the asset.  Ensures the required LoadFont is added.
 
 
+
+To put this all another way, we need to:
+
+1. Make some Content-unique ID from a random font ID.  Then we can store this in the metadata.xml, and the user can change the font.
+
+2. Then do the same trick later, with the same result, so the decoder can receive the random font ID and go via the Content-unique
+ID to get the actual font TTF from the Content.
+
+In both these situations a string is the easiest thing (to go in some XML, and to go in a dcp::SubtitleString).
+
+This whole problem really is just that a single TextContent represents multiple
+DCP reels, and each reel can have a different font with the same font ID.
diff --git a/doc/design/fonts.svg b/doc/design/fonts.svg
new file mode 100644 (file)
index 0000000..515bc1a
--- /dev/null
@@ -0,0 +1,615 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 210 297"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
+   sodipodi:docname="fonts.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#ffffff"
+     inkscape:document-units="mm"
+     inkscape:zoom="1.4218013"
+     inkscape:cx="-50.288319"
+     inkscape:cy="514.83986"
+     inkscape:window-width="1920"
+     inkscape:window-height="1043"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1"
+     showborder="false" />
+  <defs
+     id="defs1">
+    <marker
+       style="overflow:visible"
+       id="marker43"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path7" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ConcaveTriangle"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path9" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ConcaveTriangle-2"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path9-2" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ConcaveTriangle-0"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path9-3" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ConcaveTriangle-0-5"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path9-3-4" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ConcaveTriangle-0-5-6"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path9-3-4-8" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ConcaveTriangle-0-5-6-0"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Concave triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.7)"
+         d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         id="path9-3-4-8-6" />
+    </marker>
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <text
+       xml:space="preserve"
+       style="font-size:5.64444px;fill:#0000ff;stroke:#ff0000;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
+       x="19.162163"
+       y="23.234892"
+       id="text4"><tspan
+         sodipodi:role="line"
+         id="tspan4"
+         style="stroke-width:0.265"
+         x="19.162163"
+         y="23.234892" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+       x="67.090012"
+       y="117.13794"
+       id="text6"
+       transform="scale(0.26458333)"><tspan
+         sodipodi:role="line"
+         id="tspan6"
+         x="67.090012"
+         y="117.13794" /></text>
+    <g
+       id="g10"
+       transform="translate(-124.30682,74.671989)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="7.4588742"
+         y="11.577716"
+         id="text1"><tspan
+           sodipodi:role="line"
+           id="tspan1"
+           style="font-size:5.64444px;stroke-width:0.264583"
+           x="7.4588742"
+           y="11.577716">DCP</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+         x="21.397272"
+         y="11.577716"
+         id="text2"><tspan
+           sodipodi:role="line"
+           id="tspan2"
+           style="font-size:4.23333px;stroke-width:0.264583"
+           x="21.397272"
+           y="11.577716">imported to project</tspan></text>
+      <rect
+         style="fill:none;stroke:#ff0000;stroke-width:0.48;stroke-dasharray:none;stroke-opacity:1"
+         id="rect2"
+         width="12.201417"
+         height="6.364614"
+         x="7.0392933"
+         y="6.3803439" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:4.58611px;line-height:1.25;font-family:sans-serif;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none"
+         x="11.433817"
+         y="20.654835"
+         id="text3"><tspan
+           sodipodi:role="line"
+           id="tspan3"
+           style="font-size:4.58611px;fill:#0000ff;stroke-width:0.265;stroke-dasharray:none"
+           x="11.433817"
+           y="20.654835">Reel #1</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:4.58611px;line-height:1.25;font-family:sans-serif;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.265;stroke-dasharray:none"
+         x="10.747972"
+         y="40.230225"
+         id="text3-5"><tspan
+           sodipodi:role="line"
+           id="tspan3-3"
+           style="font-size:4.58611px;fill:#0000ff;stroke-width:0.265;stroke-dasharray:none"
+           x="10.747972"
+           y="40.230225">Reel #2</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:4.58611px;fill:#008000;stroke:none;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
+         x="14.594666"
+         y="27.475216"
+         id="text5"><tspan
+           sodipodi:role="line"
+           id="tspan5"
+           style="font-size:4.58611px;fill:#008000;stroke:none;stroke-width:0.265"
+           x="14.594666"
+           y="27.475216">Subtitles, font ID &quot;FONT&quot; (asset A)</tspan><tspan
+           sodipodi:role="line"
+           style="font-size:4.58611px;fill:#008000;stroke:none;stroke-width:0.265"
+           x="14.594666"
+           y="33.207855"
+           id="tspan10">Closed captions, font ID &quot;FONT&quot; (asset B)</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:4.58611px;fill:#008000;stroke:none;stroke-width:0.264999;stroke-dasharray:none;stroke-opacity:1"
+         x="14.594666"
+         y="46.414989"
+         id="text5-1"><tspan
+           sodipodi:role="line"
+           id="tspan5-8"
+           style="font-size:4.58611px;fill:#008000;stroke:none;stroke-width:0.265"
+           x="14.594666"
+           y="46.414989">Subtitles, font ID &quot;FONT&quot; (asset C)</tspan><tspan
+           sodipodi:role="line"
+           style="font-size:4.58611px;fill:#008000;stroke:none;stroke-width:0.265"
+           x="14.594666"
+           y="52.147629"
+           id="tspan10-7">Closed captions, font ID &quot;FONT&quot; (asset D)</tspan></text>
+      <rect
+         style="fill:none;stroke:#ff0000;stroke-width:0.233127;stroke-dasharray:none;stroke-opacity:1"
+         id="rect7"
+         width="101.6746"
+         height="52.954491"
+         x="4.9380584"
+         y="3.8663552" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="40.912861"
+       y="106.03439"
+       id="text11"><tspan
+         sodipodi:role="line"
+         id="tspan11"
+         style="stroke-width:0.265"
+         x="40.912861"
+         y="106.03439"></tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.265"
+         id="tspan12"
+         x="40.912861"
+         y="111.32606" /></text>
+    <g
+       id="g9"
+       transform="translate(-4.5021517,-0.4039482)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+         x="175.30579"
+         y="385.14359"
+         id="text9"
+         transform="scale(0.26458333)"><tspan
+           sodipodi:role="line"
+           id="tspan9"
+           x="175.30579"
+           y="385.14359">Examiner</tspan></text>
+      <rect
+         style="fill:none;stroke:#0000ff;stroke-width:0.431729;stroke-dasharray:none;stroke-opacity:1"
+         id="rect9"
+         width="28.884327"
+         height="7.8319788"
+         x="44.685955"
+         y="95.93483" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-align:center;text-decoration-color:#000000;text-anchor:middle;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="54.733913"
+       y="109.38216"
+       id="text13"><tspan
+         sodipodi:role="line"
+         id="tspan13"
+         style="text-align:center;text-anchor:middle;stroke-width:0.265"
+         x="54.733913"
+         y="109.38216">Allocator prepped with all fonts in the DCP</tspan><tspan
+         sodipodi:role="line"
+         style="text-align:center;text-anchor:middle;stroke-width:0.265"
+         x="54.733913"
+         y="114.67383"
+         id="tspan14">Creates ID for each font</tspan></text>
+    <path
+       style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#ConcaveTriangle);stop-color:#000000;stop-opacity:1"
+       d="m 100.96906,105.01559 h 18.54651"
+       id="path14" />
+    <path
+       style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#ConcaveTriangle-0);stop-color:#000000"
+       d="M -13.193139,105.01559 H 5.3533708"
+       id="path14-1" />
+    <path
+       style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#ConcaveTriangle-0-5);stop-color:#000000"
+       d="m -32.370275,172.28664 h 18.54651"
+       id="path14-1-6" />
+    <path
+       style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#ConcaveTriangle-0-5-6);stop-color:#000000"
+       d="m 67.930036,172.28664 h 18.5465"
+       id="path14-1-6-2" />
+    <path
+       style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#ConcaveTriangle-0-5-6-0);stop-color:#000000"
+       d="m 154.20122,172.28664 h 18.5465"
+       id="path14-1-6-2-5" />
+    <path
+       style="font-variation-settings:normal;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;marker-end:url(#ConcaveTriangle-2);stop-color:#000000"
+       d="m 172.0024,105.01559 h 18.54651"
+       id="path14-9" />
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="126.92857"
+       y="98.415504"
+       id="text15"><tspan
+         sodipodi:role="line"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata;stroke-width:0.265"
+         x="126.92857"
+         y="98.415504"
+         id="tspan17">FONT</tspan><tspan
+         sodipodi:role="line"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata;stroke-width:0.265"
+         x="126.92857"
+         y="103.8511"
+         id="tspan16">0_FONT</tspan><tspan
+         sodipodi:role="line"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata;stroke-width:0.265"
+         x="126.92857"
+         y="109.2867"
+         id="tspan19">1_FONT</tspan><tspan
+         sodipodi:role="line"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata;stroke-width:0.265"
+         x="126.92857"
+         y="114.72229"
+         id="tspan20">2_FONT</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.265"
+         x="126.92857"
+         y="120.01396"
+         id="tspan18" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:1.29;font-family:sans-serif;text-decoration-color:#000000;fill:#008000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="141.02527"
+       y="98.415504"
+       id="text21"><tspan
+         sodipodi:role="line"
+         id="tspan21"
+         style="fill:#008000;stroke-width:0.265;line-height:1.29"
+         x="141.02527"
+         y="98.415504">Subs from A</tspan><tspan
+         sodipodi:role="line"
+         style="fill:#008000;stroke-width:0.265;line-height:1.29"
+         x="141.02527"
+         y="103.8765"
+         id="tspan22">Caps from B</tspan><tspan
+         style="fill:#008000;stroke-width:0.265;line-height:1.29"
+         sodipodi:role="line"
+         id="tspan36"
+         x="141.02527"
+         y="109.33749"><tspan
+   id="tspan38"
+   style="stroke-width:0.264999;line-height:1.29">S</tspan>ubs from C</tspan><tspan
+         style="fill:#008000;stroke-width:0.265;line-height:1.29"
+         sodipodi:role="line"
+         id="tspan37"
+         x="141.02527"
+         y="114.79849">Caps from D</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="197.82054"
+       y="103.47042"
+       id="text25"><tspan
+         sodipodi:role="line"
+         id="tspan25"
+         style="stroke-width:0.265"
+         x="197.82054"
+         y="103.47042">Store in <tspan
+   style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata"
+   id="tspan33">TextContent</tspan></tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.265"
+         x="197.82054"
+         y="108.90601"
+         id="tspan32">Written to <tspan
+   style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata"
+   id="tspan34">metadata.xml</tspan></tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.265"
+         x="197.82054"
+         y="114.19768"
+         id="tspan26">Then user can change font TTF.</tspan></text>
+    <g
+       id="g28"
+       transform="translate(7.508606,2.5808953)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+         x="175.30579"
+         y="385.14359"
+         id="text9-2"
+         transform="matrix(0.26458333,0,0,0.26458333,-139.28384,58.778076)"><tspan
+           sodipodi:role="line"
+           id="tspan9-9"
+           x="175.30579"
+           y="385.14359">Decoder</tspan></text>
+      <rect
+         style="fill:none;stroke:#0000ff;stroke-width:0.405832;stroke-dasharray:none;stroke-opacity:1"
+         id="rect9-3"
+         width="25.438843"
+         height="7.8578768"
+         x="-94.181831"
+         y="154.63504" />
+    </g>
+    <g
+       id="g45"
+       transform="translate(0,-0.88292437)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+         x="175.30579"
+         y="385.14359"
+         id="text9-2-5"
+         transform="matrix(0.26458333,0,0,0.26458333,-38.448692,62.241907)"><tspan
+           sodipodi:role="line"
+           id="tspan9-9-0"
+           x="175.30579"
+           y="385.14359">DCPDecoder</tspan></text>
+      <rect
+         style="fill:none;stroke:#0000ff;stroke-width:0.481702;stroke-dasharray:none;stroke-opacity:1"
+         id="rect9-3-4"
+         width="36.188915"
+         height="7.7820067"
+         x="6.6912527"
+         y="158.1368" />
+    </g>
+    <g
+       id="g39"
+       transform="translate(-75.313631,-8.3515676)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.3333px;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;vector-effect:none;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000"
+         x="175.30579"
+         y="385.14359"
+         id="text9-2-5-7"
+         transform="matrix(0.26458333,0,0,0.26458333,132.90091,69.710541)"><tspan
+           sodipodi:role="line"
+           id="tspan9-9-0-2"
+           x="175.30579"
+           y="385.14359">TextDecoder</tspan></text>
+      <rect
+         style="fill:none;stroke:#0000ff;stroke-width:0.481702;stroke-dasharray:none;stroke-opacity:1"
+         id="rect9-3-4-7"
+         width="36.188915"
+         height="7.7820067"
+         x="178.04085"
+         y="165.60544" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-align:center;text-decoration-color:#000000;text-anchor:middle;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="-73.991905"
+       y="148.05048"
+       id="text13-2"><tspan
+         sodipodi:role="line"
+         id="tspan13-0"
+         style="text-align:center;text-anchor:middle;stroke-width:0.265"
+         x="-73.991905"
+         y="148.05048">Allocator prepped with all fonts in the DCP</tspan><tspan
+         sodipodi:role="line"
+         style="text-align:center;text-anchor:middle;stroke-width:0.265"
+         x="-73.991905"
+         y="153.34213"
+         id="tspan14-6">Creates ID for each font, <tspan
+   style="font-weight:bold"
+   id="tspan29">same IDs as before</tspan></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="-113.201"
+       y="173.88472"
+       id="text28"><tspan
+         sodipodi:role="line"
+         id="tspan28"
+         style="stroke-width:0.265"
+         x="-113.201"
+         y="173.88472">Emits a subtitle with FONT from asset C</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="-9.4808464"
+       y="170.79439"
+       id="text30"><tspan
+         sodipodi:role="line"
+         id="tspan30"
+         style="stroke-width:0.265"
+         x="-9.4808464"
+         y="170.79439"><tspan
+   style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata"
+   id="tspan31">dcp::SubtitleString</tspan> re-written to use</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.265"
+         x="-9.4808464"
+         y="176.22998"
+         id="tspan40">font ID <tspan
+   style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata"
+   id="tspan39">1_FONT</tspan> (from allocator)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="93.52124"
+       y="171.21983"
+       id="text41"><tspan
+         sodipodi:role="line"
+         id="tspan41"
+         style="stroke-width:0.265"
+         x="93.52124"
+         y="171.21983"><tspan
+   style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata"
+   id="tspan43">StringText</tspan> created with the</tspan><tspan
+         sodipodi:role="line"
+         style="stroke-width:0.265"
+         x="93.52124"
+         y="176.51149"
+         id="tspan42">actual font TTF.</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:0.26458299, 0.52916598;stroke-dashoffset:0;marker-start:url(#marker43);marker-end:url(#ConcaveTriangle-0-5-6)"
+       d="m 192.80332,112.69695 -54.0961,41.53069"
+       id="path43" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333px;line-height:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="17.63851"
+       y="205.46201"
+       id="text44"
+       transform="rotate(-37.518172)"><tspan
+         sodipodi:role="line"
+         id="tspan44"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:inconsolata;-inkscape-font-specification:inconsolata;stroke-width:0.265"
+         x="17.63851"
+         y="205.46201">TextContent::get_font(&quot;1_FONT&quot;)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:4.23333px;line-height:normal;font-family:sans-serif;text-decoration-color:#000000;fill:#000000;stroke-width:0.264999;-inkscape-stroke:none;stop-color:#000000"
+       x="178.33331"
+       y="173.31322"
+       id="text45"><tspan
+         sodipodi:role="line"
+         id="tspan45"
+         style="stroke-width:0.265"
+         x="178.33331"
+         y="173.31322">Output DCP</tspan></text>
+  </g>
+</svg>