[{"data":1,"prerenderedAt":1619},["ShallowReactive",2],{"docs:\u002Freference\u002Ftypography":3},{"id":4,"title":5,"body":6,"description":1610,"extension":1611,"meta":1612,"navigation":1614,"path":1615,"seo":1616,"stem":1617,"__hash__":1618},"docs\u002Freference\u002Ftypography.md","Typography",{"type":7,"value":8,"toc":1604},"minimark",[9,13,22,28,68,73,84,757,762,765,838,868,946,952,955,998,1010,1038,1040,1156,1169,1180,1271,1303,1406,1409,1587,1600],[10,11,5],"h1",{"id":12},"typography",[14,15,16,17,21],"p",{},"The ",[18,19,20],"code",{},"pydreamplet.typography"," module resolves installed font files and measures\ntext with HarfBuzz shaping plus fontTools line metrics. Use it when generated\nlayout depends on text dimensions.",[14,23,24,25,27],{},"Typography utilities are imported from ",[18,26,20],{},".",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-python shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark","from pydreamplet.typography import TypographyMeasurer, get_system_font_path\n","python","",[18,36,37],{"__ignoreMap":34},[38,39,42,46,50,53,56,59,62,65],"span",{"class":40,"line":41},"line",1,[38,43,45],{"class":44},"sED7I","from",[38,47,49],{"class":48},"soTeR"," pydreamplet",[38,51,27],{"class":52},"sVsmf",[38,54,55],{"class":48},"typography ",[38,57,58],{"class":44},"import",[38,60,61],{"class":48}," TypographyMeasurer",[38,63,64],{"class":52},",",[38,66,67],{"class":48}," get_system_font_path\n",[69,70,72],"h2",{"id":71},"visual-example","Visual Example",[14,74,75,76,79,80,83],{},"This example measures a ",[18,77,78],{},"Text"," element and draws the measured box behind it. Use\nan explicit ",[18,81,82],{},"font_path"," when reproducible dimensions matter, because system font\nlookup depends on the machine where the code runs.",[29,85,87],{"className":31,"code":86,"language":33,"meta":34,"style":34},"import pydreamplet as dp\nfrom pydreamplet.typography import TypographyMeasurer, get_system_font_path\n\nfont_path = get_system_font_path(\"Arial\", 400)\nif font_path is None:\n    raise RuntimeError(\"Arial is not available on this system.\")\n\nlabel = dp.Text(\n    \"pyDreamplet\",\n    x=32,\n    y=78,\n    font_family=\"Arial\",\n    font_size=32,\n    font_weight=400,\n    fill=\"currentColor\",\n)\n\nmeasurer = TypographyMeasurer(font_path=font_path)\nwidth, height = measurer.measure_text(label)\n\nsvg = dp.SVG(300, 140)\nsvg.append(\n    dp.Rect(\n        x=label.x,\n        y=label.y - height * 0.78,\n        width=width,\n        height=height,\n        fill=\"none\",\n        stroke=\"#14b8a6\",\n        stroke_width=2,\n        stroke_dasharray=\"5 4\",\n    ),\n    dp.Line(label.x, label.y, label.x + width, label.y, stroke=\"#f83898\", stroke_width=2),\n    label,\n    dp.Text(f\"{width:.1f} x {height:.1f}\", x=32, y=116, font_size=12, fill=\"currentColor\"),\n)\n",[18,88,89,102,121,128,164,183,204,209,227,241,255,268,284,296,309,326,331,336,356,384,389,416,429,442,460,488,500,513,530,547,560,577,583,658,666,752],{"__ignoreMap":34},[38,90,91,93,96,99],{"class":40,"line":41},[38,92,58],{"class":44},[38,94,95],{"class":48}," pydreamplet ",[38,97,98],{"class":44},"as",[38,100,101],{"class":48}," dp\n",[38,103,105,107,109,111,113,115,117,119],{"class":40,"line":104},2,[38,106,45],{"class":44},[38,108,49],{"class":48},[38,110,27],{"class":52},[38,112,55],{"class":48},[38,114,58],{"class":44},[38,116,61],{"class":48},[38,118,64],{"class":52},[38,120,67],{"class":48},[38,122,124],{"class":40,"line":123},3,[38,125,127],{"emptyLinePlaceholder":126},true,"\n",[38,129,131,134,138,142,145,149,153,155,157,161],{"class":40,"line":130},4,[38,132,133],{"class":48},"font_path ",[38,135,137],{"class":136},"sWKEy","=",[38,139,141],{"class":140},"sAK04"," get_system_font_path",[38,143,144],{"class":52},"(",[38,146,148],{"class":147},"sqo_7","\"",[38,150,152],{"class":151},"s_jvP","Arial",[38,154,148],{"class":147},[38,156,64],{"class":52},[38,158,160],{"class":159},"sNpir"," 400",[38,162,163],{"class":52},")\n",[38,165,167,170,173,176,180],{"class":40,"line":166},5,[38,168,169],{"class":44},"if",[38,171,172],{"class":48}," font_path ",[38,174,175],{"class":136},"is",[38,177,179],{"class":178},"sTy78"," None",[38,181,182],{"class":52},":\n",[38,184,186,189,193,195,197,200,202],{"class":40,"line":185},6,[38,187,188],{"class":44},"    raise",[38,190,192],{"class":191},"s-tzF"," RuntimeError",[38,194,144],{"class":52},[38,196,148],{"class":147},[38,198,199],{"class":151},"Arial is not available on this system.",[38,201,148],{"class":147},[38,203,163],{"class":52},[38,205,207],{"class":40,"line":206},7,[38,208,127],{"emptyLinePlaceholder":126},[38,210,212,215,217,220,222,224],{"class":40,"line":211},8,[38,213,214],{"class":48},"label ",[38,216,137],{"class":136},[38,218,219],{"class":48}," dp",[38,221,27],{"class":52},[38,223,78],{"class":140},[38,225,226],{"class":52},"(\n",[38,228,230,233,236,238],{"class":40,"line":229},9,[38,231,232],{"class":147},"    \"",[38,234,235],{"class":151},"pyDreamplet",[38,237,148],{"class":147},[38,239,240],{"class":52},",\n",[38,242,244,248,250,253],{"class":40,"line":243},10,[38,245,247],{"class":246},"sYEV4","    x",[38,249,137],{"class":136},[38,251,252],{"class":159},"32",[38,254,240],{"class":52},[38,256,258,261,263,266],{"class":40,"line":257},11,[38,259,260],{"class":246},"    y",[38,262,137],{"class":136},[38,264,265],{"class":159},"78",[38,267,240],{"class":52},[38,269,271,274,276,278,280,282],{"class":40,"line":270},12,[38,272,273],{"class":246},"    font_family",[38,275,137],{"class":136},[38,277,148],{"class":147},[38,279,152],{"class":151},[38,281,148],{"class":147},[38,283,240],{"class":52},[38,285,287,290,292,294],{"class":40,"line":286},13,[38,288,289],{"class":246},"    font_size",[38,291,137],{"class":136},[38,293,252],{"class":159},[38,295,240],{"class":52},[38,297,299,302,304,307],{"class":40,"line":298},14,[38,300,301],{"class":246},"    font_weight",[38,303,137],{"class":136},[38,305,306],{"class":159},"400",[38,308,240],{"class":52},[38,310,312,315,317,319,322,324],{"class":40,"line":311},15,[38,313,314],{"class":246},"    fill",[38,316,137],{"class":136},[38,318,148],{"class":147},[38,320,321],{"class":151},"currentColor",[38,323,148],{"class":147},[38,325,240],{"class":52},[38,327,329],{"class":40,"line":328},16,[38,330,163],{"class":52},[38,332,334],{"class":40,"line":333},17,[38,335,127],{"emptyLinePlaceholder":126},[38,337,339,342,344,346,348,350,352,354],{"class":40,"line":338},18,[38,340,341],{"class":48},"measurer ",[38,343,137],{"class":136},[38,345,61],{"class":140},[38,347,144],{"class":52},[38,349,82],{"class":246},[38,351,137],{"class":136},[38,353,82],{"class":140},[38,355,163],{"class":52},[38,357,359,362,364,367,369,372,374,377,379,382],{"class":40,"line":358},19,[38,360,361],{"class":48},"width",[38,363,64],{"class":52},[38,365,366],{"class":48}," height ",[38,368,137],{"class":136},[38,370,371],{"class":48}," measurer",[38,373,27],{"class":52},[38,375,376],{"class":140},"measure_text",[38,378,144],{"class":52},[38,380,381],{"class":140},"label",[38,383,163],{"class":52},[38,385,387],{"class":40,"line":386},20,[38,388,127],{"emptyLinePlaceholder":126},[38,390,392,395,397,399,401,404,406,409,411,414],{"class":40,"line":391},21,[38,393,394],{"class":48},"svg ",[38,396,137],{"class":136},[38,398,219],{"class":48},[38,400,27],{"class":52},[38,402,403],{"class":140},"SVG",[38,405,144],{"class":52},[38,407,408],{"class":159},"300",[38,410,64],{"class":52},[38,412,413],{"class":159}," 140",[38,415,163],{"class":52},[38,417,419,422,424,427],{"class":40,"line":418},22,[38,420,421],{"class":48},"svg",[38,423,27],{"class":52},[38,425,426],{"class":140},"append",[38,428,226],{"class":52},[38,430,432,435,437,440],{"class":40,"line":431},23,[38,433,434],{"class":140},"    dp",[38,436,27],{"class":52},[38,438,439],{"class":140},"Rect",[38,441,226],{"class":52},[38,443,445,448,450,452,454,458],{"class":40,"line":444},24,[38,446,447],{"class":246},"        x",[38,449,137],{"class":136},[38,451,381],{"class":140},[38,453,27],{"class":52},[38,455,457],{"class":456},"sm80-","x",[38,459,240],{"class":52},[38,461,463,466,468,470,472,475,478,480,483,486],{"class":40,"line":462},25,[38,464,465],{"class":246},"        y",[38,467,137],{"class":136},[38,469,381],{"class":140},[38,471,27],{"class":52},[38,473,474],{"class":456},"y",[38,476,477],{"class":136}," -",[38,479,366],{"class":140},[38,481,482],{"class":136},"*",[38,484,485],{"class":159}," 0.78",[38,487,240],{"class":52},[38,489,491,494,496,498],{"class":40,"line":490},26,[38,492,493],{"class":246},"        width",[38,495,137],{"class":136},[38,497,361],{"class":140},[38,499,240],{"class":52},[38,501,503,506,508,511],{"class":40,"line":502},27,[38,504,505],{"class":246},"        height",[38,507,137],{"class":136},[38,509,510],{"class":140},"height",[38,512,240],{"class":52},[38,514,516,519,521,523,526,528],{"class":40,"line":515},28,[38,517,518],{"class":246},"        fill",[38,520,137],{"class":136},[38,522,148],{"class":147},[38,524,525],{"class":151},"none",[38,527,148],{"class":147},[38,529,240],{"class":52},[38,531,533,536,538,540,543,545],{"class":40,"line":532},29,[38,534,535],{"class":246},"        stroke",[38,537,137],{"class":136},[38,539,148],{"class":147},[38,541,542],{"class":151},"#14b8a6",[38,544,148],{"class":147},[38,546,240],{"class":52},[38,548,550,553,555,558],{"class":40,"line":549},30,[38,551,552],{"class":246},"        stroke_width",[38,554,137],{"class":136},[38,556,557],{"class":159},"2",[38,559,240],{"class":52},[38,561,563,566,568,570,573,575],{"class":40,"line":562},31,[38,564,565],{"class":246},"        stroke_dasharray",[38,567,137],{"class":136},[38,569,148],{"class":147},[38,571,572],{"class":151},"5 4",[38,574,148],{"class":147},[38,576,240],{"class":52},[38,578,580],{"class":40,"line":579},32,[38,581,582],{"class":52},"    ),\n",[38,584,586,588,590,593,595,597,599,601,603,606,608,610,612,614,616,618,621,624,626,628,630,632,634,637,639,641,644,646,648,651,653,655],{"class":40,"line":585},33,[38,587,434],{"class":140},[38,589,27],{"class":52},[38,591,592],{"class":140},"Line",[38,594,144],{"class":52},[38,596,381],{"class":140},[38,598,27],{"class":52},[38,600,457],{"class":456},[38,602,64],{"class":52},[38,604,605],{"class":140}," label",[38,607,27],{"class":52},[38,609,474],{"class":456},[38,611,64],{"class":52},[38,613,605],{"class":140},[38,615,27],{"class":52},[38,617,457],{"class":456},[38,619,620],{"class":136}," +",[38,622,623],{"class":140}," width",[38,625,64],{"class":52},[38,627,605],{"class":140},[38,629,27],{"class":52},[38,631,474],{"class":456},[38,633,64],{"class":52},[38,635,636],{"class":246}," stroke",[38,638,137],{"class":136},[38,640,148],{"class":147},[38,642,643],{"class":151},"#f83898",[38,645,148],{"class":147},[38,647,64],{"class":52},[38,649,650],{"class":246}," stroke_width",[38,652,137],{"class":136},[38,654,557],{"class":159},[38,656,657],{"class":52},"),\n",[38,659,661,664],{"class":40,"line":660},34,[38,662,663],{"class":140},"    label",[38,665,240],{"class":52},[38,667,669,671,673,675,677,681,683,687,689,692,695,698,700,702,704,706,708,710,713,715,717,719,722,724,727,729,732,734,737,739,742,744,746,748,750],{"class":40,"line":668},35,[38,670,434],{"class":140},[38,672,27],{"class":52},[38,674,78],{"class":140},[38,676,144],{"class":52},[38,678,680],{"class":679},"sfdCM","f",[38,682,148],{"class":151},[38,684,686],{"class":685},"smmm7","{",[38,688,361],{"class":140},[38,690,691],{"class":679},":.1f",[38,693,694],{"class":685},"}",[38,696,697],{"class":151}," x ",[38,699,686],{"class":685},[38,701,510],{"class":140},[38,703,691],{"class":679},[38,705,694],{"class":685},[38,707,148],{"class":151},[38,709,64],{"class":52},[38,711,712],{"class":246}," x",[38,714,137],{"class":136},[38,716,252],{"class":159},[38,718,64],{"class":52},[38,720,721],{"class":246}," y",[38,723,137],{"class":136},[38,725,726],{"class":159},"116",[38,728,64],{"class":52},[38,730,731],{"class":246}," font_size",[38,733,137],{"class":136},[38,735,736],{"class":159},"12",[38,738,64],{"class":52},[38,740,741],{"class":246}," fill",[38,743,137],{"class":136},[38,745,148],{"class":147},[38,747,321],{"class":151},[38,749,148],{"class":147},[38,751,657],{"class":52},[38,753,755],{"class":40,"line":754},36,[38,756,163],{"class":52},[758,759],"svg-preview",{"alt":760,"src":761},"Measured text with a dashed bounding box and baseline.","\u002Fshowcase\u002Fref_typography_measure.svg",[69,763,764],{"id":764},"get_system_font_path",[29,766,768],{"className":31,"code":767,"language":33,"meta":34,"style":34},"get_system_font_path(\n    font_family: str,\n    weight: int = 400,\n    weight_tolerance: int = 100,\n) -> str | None\n",[18,769,770,776,788,805,821],{"__ignoreMap":34},[38,771,772,774],{"class":40,"line":41},[38,773,764],{"class":140},[38,775,226],{"class":52},[38,777,778,780,783,786],{"class":40,"line":104},[38,779,273],{"class":140},[38,781,782],{"class":52},":",[38,784,785],{"class":191}," str",[38,787,240],{"class":52},[38,789,790,793,795,798,801,803],{"class":40,"line":123},[38,791,792],{"class":140},"    weight",[38,794,782],{"class":52},[38,796,797],{"class":246}," int",[38,799,800],{"class":136}," =",[38,802,160],{"class":159},[38,804,240],{"class":52},[38,806,807,810,812,814,816,819],{"class":40,"line":130},[38,808,809],{"class":140},"    weight_tolerance",[38,811,782],{"class":52},[38,813,797],{"class":246},[38,815,800],{"class":136},[38,817,818],{"class":159}," 100",[38,820,240],{"class":52},[38,822,823,826,830,832,835],{"class":40,"line":166},[38,824,825],{"class":52},")",[38,827,829],{"class":828},"str-j"," ->",[38,831,785],{"class":191},[38,833,834],{"class":136}," |",[38,836,837],{"class":178}," None\n",[14,839,840,841,844,845,848,849,852,853,856,857,860,861,864,865,27],{},"Searches common system font directories for a ",[18,842,843],{},".ttf"," or ",[18,846,847],{},".otf"," file whose name\nrecords contain ",[18,850,851],{},"font_family",". If the font has an ",[18,854,855],{},"OS\u002F2"," table, its\n",[18,858,859],{},"usWeightClass"," must be within ",[18,862,863],{},"weight_tolerance"," of ",[18,866,867],{},"weight",[29,869,871],{"className":31,"code":870,"language":33,"meta":34,"style":34},"font_path = get_system_font_path(\"Arial\", 700)\n\nif font_path is None:\n    print(\"Font not found\")\nelse:\n    print(font_path)\n",[18,872,873,896,900,912,929,936],{"__ignoreMap":34},[38,874,875,877,879,881,883,885,887,889,891,894],{"class":40,"line":41},[38,876,133],{"class":48},[38,878,137],{"class":136},[38,880,141],{"class":140},[38,882,144],{"class":52},[38,884,148],{"class":147},[38,886,152],{"class":151},[38,888,148],{"class":147},[38,890,64],{"class":52},[38,892,893],{"class":159}," 700",[38,895,163],{"class":52},[38,897,898],{"class":40,"line":104},[38,899,127],{"emptyLinePlaceholder":126},[38,901,902,904,906,908,910],{"class":40,"line":123},[38,903,169],{"class":44},[38,905,172],{"class":48},[38,907,175],{"class":136},[38,909,179],{"class":178},[38,911,182],{"class":52},[38,913,914,918,920,922,925,927],{"class":40,"line":130},[38,915,917],{"class":916},"sBTIf","    print",[38,919,144],{"class":52},[38,921,148],{"class":147},[38,923,924],{"class":151},"Font not found",[38,926,148],{"class":147},[38,928,163],{"class":52},[38,930,931,934],{"class":40,"line":166},[38,932,933],{"class":44},"else",[38,935,182],{"class":52},[38,937,938,940,942,944],{"class":40,"line":185},[38,939,917],{"class":916},[38,941,144],{"class":52},[38,943,82],{"class":140},[38,945,163],{"class":52},[14,947,948,949,27],{},"The lookup is intentionally environment-dependent. For stable output in a\nproject or CI job, pass a known font file path to ",[18,950,951],{},"TypographyMeasurer",[69,953,951],{"id":954},"typographymeasurer",[29,956,958],{"className":31,"code":957,"language":33,"meta":34,"style":34},"TypographyMeasurer(dpi: float = 72.0, font_path: str | None = None)\n",[18,959,960],{"__ignoreMap":34},[38,961,962,964,966,969,971,974,976,979,981,984,986,988,990,992,994,996],{"class":40,"line":41},[38,963,951],{"class":140},[38,965,144],{"class":52},[38,967,968],{"class":140},"dpi",[38,970,782],{"class":52},[38,972,973],{"class":246}," float",[38,975,800],{"class":136},[38,977,978],{"class":159}," 72.0",[38,980,64],{"class":52},[38,982,983],{"class":140}," font_path",[38,985,782],{"class":52},[38,987,785],{"class":191},[38,989,834],{"class":136},[38,991,179],{"class":246},[38,993,800],{"class":136},[38,995,179],{"class":178},[38,997,163],{"class":52},[14,999,1000,1002,1003,1006,1007,1009],{},[18,1001,968],{}," controls point-to-pixel conversion. At the default ",[18,1004,1005],{},"72.0",", one point maps\nto one pixel. ",[18,1008,82],{}," can be set once so later measurements do not need a\nsystem font lookup.",[29,1011,1013],{"className":31,"code":1012,"language":33,"meta":34,"style":34},"measurer = TypographyMeasurer(font_path=\"assets\u002Ffonts\u002FInter-Regular.ttf\")\n",[18,1014,1015],{"__ignoreMap":34},[38,1016,1017,1019,1021,1023,1025,1027,1029,1031,1034,1036],{"class":40,"line":41},[38,1018,341],{"class":48},[38,1020,137],{"class":136},[38,1022,61],{"class":140},[38,1024,144],{"class":52},[38,1026,82],{"class":246},[38,1028,137],{"class":136},[38,1030,148],{"class":147},[38,1032,1033],{"class":151},"assets\u002Ffonts\u002FInter-Regular.ttf",[38,1035,148],{"class":147},[38,1037,163],{"class":52},[69,1039,376],{"id":376},[29,1041,1043],{"className":31,"code":1042,"language":33,"meta":34,"style":34},"measure_text(\n    text: str | TextElementLike,\n    *,\n    font_family: str | None = None,\n    weight: int | None = None,\n    font_size: Real | str | None = None,\n) -> tuple[float, float]\n",[18,1044,1045,1051,1067,1074,1092,1110,1134],{"__ignoreMap":34},[38,1046,1047,1049],{"class":40,"line":41},[38,1048,376],{"class":140},[38,1050,226],{"class":52},[38,1052,1053,1056,1058,1060,1062,1065],{"class":40,"line":104},[38,1054,1055],{"class":140},"    text",[38,1057,782],{"class":52},[38,1059,785],{"class":191},[38,1061,834],{"class":136},[38,1063,1064],{"class":140}," TextElementLike",[38,1066,240],{"class":52},[38,1068,1069,1072],{"class":40,"line":123},[38,1070,1071],{"class":136},"    *",[38,1073,240],{"class":52},[38,1075,1076,1078,1080,1082,1084,1086,1088,1090],{"class":40,"line":130},[38,1077,273],{"class":140},[38,1079,782],{"class":52},[38,1081,785],{"class":191},[38,1083,834],{"class":136},[38,1085,179],{"class":246},[38,1087,800],{"class":136},[38,1089,179],{"class":178},[38,1091,240],{"class":52},[38,1093,1094,1096,1098,1100,1102,1104,1106,1108],{"class":40,"line":166},[38,1095,792],{"class":140},[38,1097,782],{"class":52},[38,1099,797],{"class":191},[38,1101,834],{"class":136},[38,1103,179],{"class":246},[38,1105,800],{"class":136},[38,1107,179],{"class":178},[38,1109,240],{"class":52},[38,1111,1112,1114,1116,1119,1122,1124,1126,1128,1130,1132],{"class":40,"line":185},[38,1113,289],{"class":140},[38,1115,782],{"class":52},[38,1117,1118],{"class":140}," Real ",[38,1120,1121],{"class":136},"|",[38,1123,785],{"class":191},[38,1125,834],{"class":136},[38,1127,179],{"class":246},[38,1129,800],{"class":136},[38,1131,179],{"class":178},[38,1133,240],{"class":52},[38,1135,1136,1138,1140,1143,1146,1149,1151,1153],{"class":40,"line":206},[38,1137,825],{"class":52},[38,1139,829],{"class":828},[38,1141,1142],{"class":48}," tuple",[38,1144,1145],{"class":52},"[",[38,1147,1148],{"class":191},"float",[38,1150,64],{"class":52},[38,1152,973],{"class":191},[38,1154,1155],{"class":52},"]\n",[14,1157,1158,1159,1162,1163,1166,1167,27],{},"Measures shaped text width and line-metric height in pixels. ",[18,1160,1161],{},"text"," can be a\nplain string or an element with a string ",[18,1164,1165],{},"content"," property, such as ",[18,1168,78],{},[14,1170,1171,1172,1174,1175,1177,1178,27],{},"For plain strings, provide ",[18,1173,851],{}," and ",[18,1176,867],{}," unless the measurer already\nhas ",[18,1179,82],{},[29,1181,1183],{"className":31,"code":1182,"language":33,"meta":34,"style":34},"measurer = TypographyMeasurer()\nwidth, height = measurer.measure_text(\n    \"Hello\\nWorld\",\n    font_family=\"Arial\",\n    weight=400,\n    font_size=16,\n)\n",[18,1184,1185,1196,1214,1232,1246,1256,1267],{"__ignoreMap":34},[38,1186,1187,1189,1191,1193],{"class":40,"line":41},[38,1188,341],{"class":48},[38,1190,137],{"class":136},[38,1192,61],{"class":140},[38,1194,1195],{"class":52},"()\n",[38,1197,1198,1200,1202,1204,1206,1208,1210,1212],{"class":40,"line":104},[38,1199,361],{"class":48},[38,1201,64],{"class":52},[38,1203,366],{"class":48},[38,1205,137],{"class":136},[38,1207,371],{"class":48},[38,1209,27],{"class":52},[38,1211,376],{"class":140},[38,1213,226],{"class":52},[38,1215,1216,1218,1221,1225,1228,1230],{"class":40,"line":123},[38,1217,232],{"class":147},[38,1219,1220],{"class":151},"Hello",[38,1222,1224],{"class":1223},"sRXN5","\\n",[38,1226,1227],{"class":151},"World",[38,1229,148],{"class":147},[38,1231,240],{"class":52},[38,1233,1234,1236,1238,1240,1242,1244],{"class":40,"line":130},[38,1235,273],{"class":246},[38,1237,137],{"class":136},[38,1239,148],{"class":147},[38,1241,152],{"class":151},[38,1243,148],{"class":147},[38,1245,240],{"class":52},[38,1247,1248,1250,1252,1254],{"class":40,"line":166},[38,1249,792],{"class":246},[38,1251,137],{"class":136},[38,1253,306],{"class":159},[38,1255,240],{"class":52},[38,1257,1258,1260,1262,1265],{"class":40,"line":185},[38,1259,289],{"class":246},[38,1261,137],{"class":136},[38,1263,1264],{"class":159},"16",[38,1266,240],{"class":52},[38,1268,1269],{"class":40,"line":206},[38,1270,163],{"class":52},[14,1272,1273,1274,1276,1277,1280,1281,1283,1284,240,1286,1289,1290,1293,1294,1296,1297,844,1300,27],{},"For ",[18,1275,78],{}," elements, ",[18,1278,1279],{},"measure_text()"," reads ",[18,1282,1165],{},", ",[18,1285,851],{},[18,1287,1288],{},"font_weight",", and ",[18,1291,1292],{},"font_size"," from the element when those values are not passed\nexplicitly. ",[18,1295,1292],{}," may be numeric or a string with a leading number, such as\n",[18,1298,1299],{},"\"16px\"",[18,1301,1302],{},"\"10.5pt\"",[29,1304,1306],{"className":31,"code":1305,"language":33,"meta":34,"style":34},"label = dp.Text(\"Measured label\")\nlabel.font_family = \"Arial\"\nlabel.font_size = \"16px\"\nlabel.font_weight = 400\n\nwidth, height = TypographyMeasurer().measure_text(label)\n",[18,1307,1308,1331,1349,1366,1379,1383],{"__ignoreMap":34},[38,1309,1310,1312,1314,1316,1318,1320,1322,1324,1327,1329],{"class":40,"line":41},[38,1311,214],{"class":48},[38,1313,137],{"class":136},[38,1315,219],{"class":48},[38,1317,27],{"class":52},[38,1319,78],{"class":140},[38,1321,144],{"class":52},[38,1323,148],{"class":147},[38,1325,1326],{"class":151},"Measured label",[38,1328,148],{"class":147},[38,1330,163],{"class":52},[38,1332,1333,1335,1337,1339,1341,1344,1346],{"class":40,"line":104},[38,1334,381],{"class":48},[38,1336,27],{"class":52},[38,1338,851],{"class":456},[38,1340,800],{"class":136},[38,1342,1343],{"class":147}," \"",[38,1345,152],{"class":151},[38,1347,1348],{"class":147},"\"\n",[38,1350,1351,1353,1355,1357,1359,1361,1364],{"class":40,"line":123},[38,1352,381],{"class":48},[38,1354,27],{"class":52},[38,1356,1292],{"class":456},[38,1358,800],{"class":136},[38,1360,1343],{"class":147},[38,1362,1363],{"class":151},"16px",[38,1365,1348],{"class":147},[38,1367,1368,1370,1372,1374,1376],{"class":40,"line":130},[38,1369,381],{"class":48},[38,1371,27],{"class":52},[38,1373,1288],{"class":456},[38,1375,800],{"class":136},[38,1377,1378],{"class":159}," 400\n",[38,1380,1381],{"class":40,"line":166},[38,1382,127],{"emptyLinePlaceholder":126},[38,1384,1385,1387,1389,1391,1393,1395,1398,1400,1402,1404],{"class":40,"line":185},[38,1386,361],{"class":48},[38,1388,64],{"class":52},[38,1390,366],{"class":48},[38,1392,137],{"class":136},[38,1394,61],{"class":140},[38,1396,1397],{"class":52},"().",[38,1399,376],{"class":140},[38,1401,144],{"class":52},[38,1403,381],{"class":140},[38,1405,163],{"class":52},[14,1407,1408],{},"Multiline text uses the widest shaped line and one line height per line.",[29,1410,1412],{"className":31,"code":1411,"language":33,"meta":34,"style":34},"single_width, single_height = measurer.measure_text(\n    \"Line\",\n    font_family=\"Arial\",\n    weight=400,\n    font_size=16,\n)\nmulti_width, multi_height = measurer.measure_text(\n    \"Line\\nLine\",\n    font_family=\"Arial\",\n    weight=400,\n    font_size=16,\n)\n\nassert multi_width == single_width\nassert multi_height == single_height * 2\n",[18,1413,1414,1434,1444,1458,1468,1478,1482,1502,1516,1530,1540,1550,1554,1558,1572],{"__ignoreMap":34},[38,1415,1416,1419,1421,1424,1426,1428,1430,1432],{"class":40,"line":41},[38,1417,1418],{"class":48},"single_width",[38,1420,64],{"class":52},[38,1422,1423],{"class":48}," single_height ",[38,1425,137],{"class":136},[38,1427,371],{"class":48},[38,1429,27],{"class":52},[38,1431,376],{"class":140},[38,1433,226],{"class":52},[38,1435,1436,1438,1440,1442],{"class":40,"line":104},[38,1437,232],{"class":147},[38,1439,592],{"class":151},[38,1441,148],{"class":147},[38,1443,240],{"class":52},[38,1445,1446,1448,1450,1452,1454,1456],{"class":40,"line":123},[38,1447,273],{"class":246},[38,1449,137],{"class":136},[38,1451,148],{"class":147},[38,1453,152],{"class":151},[38,1455,148],{"class":147},[38,1457,240],{"class":52},[38,1459,1460,1462,1464,1466],{"class":40,"line":130},[38,1461,792],{"class":246},[38,1463,137],{"class":136},[38,1465,306],{"class":159},[38,1467,240],{"class":52},[38,1469,1470,1472,1474,1476],{"class":40,"line":166},[38,1471,289],{"class":246},[38,1473,137],{"class":136},[38,1475,1264],{"class":159},[38,1477,240],{"class":52},[38,1479,1480],{"class":40,"line":185},[38,1481,163],{"class":52},[38,1483,1484,1487,1489,1492,1494,1496,1498,1500],{"class":40,"line":206},[38,1485,1486],{"class":48},"multi_width",[38,1488,64],{"class":52},[38,1490,1491],{"class":48}," multi_height ",[38,1493,137],{"class":136},[38,1495,371],{"class":48},[38,1497,27],{"class":52},[38,1499,376],{"class":140},[38,1501,226],{"class":52},[38,1503,1504,1506,1508,1510,1512,1514],{"class":40,"line":211},[38,1505,232],{"class":147},[38,1507,592],{"class":151},[38,1509,1224],{"class":1223},[38,1511,592],{"class":151},[38,1513,148],{"class":147},[38,1515,240],{"class":52},[38,1517,1518,1520,1522,1524,1526,1528],{"class":40,"line":229},[38,1519,273],{"class":246},[38,1521,137],{"class":136},[38,1523,148],{"class":147},[38,1525,152],{"class":151},[38,1527,148],{"class":147},[38,1529,240],{"class":52},[38,1531,1532,1534,1536,1538],{"class":40,"line":243},[38,1533,792],{"class":246},[38,1535,137],{"class":136},[38,1537,306],{"class":159},[38,1539,240],{"class":52},[38,1541,1542,1544,1546,1548],{"class":40,"line":257},[38,1543,289],{"class":246},[38,1545,137],{"class":136},[38,1547,1264],{"class":159},[38,1549,240],{"class":52},[38,1551,1552],{"class":40,"line":270},[38,1553,163],{"class":52},[38,1555,1556],{"class":40,"line":286},[38,1557,127],{"emptyLinePlaceholder":126},[38,1559,1560,1563,1566,1569],{"class":40,"line":298},[38,1561,1562],{"class":44},"assert",[38,1564,1565],{"class":48}," multi_width ",[38,1567,1568],{"class":136},"==",[38,1570,1571],{"class":48}," single_width\n",[38,1573,1574,1576,1578,1580,1582,1584],{"class":40,"line":311},[38,1575,1562],{"class":44},[38,1577,1491],{"class":48},[38,1579,1568],{"class":136},[38,1581,1423],{"class":48},[38,1583,482],{"class":136},[38,1585,1586],{"class":159}," 2\n",[14,1588,1589,1591,1592,1595,1596,1599],{},[18,1590,1279],{}," raises ",[18,1593,1594],{},"ValueError"," when no font path can be resolved and\nraises ",[18,1597,1598],{},"TypeError"," when the input is neither a string nor a text-like element.",[1601,1602,1603],"style",{},"html pre.shiki code .sED7I, html code.shiki .sED7I{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#A0111F;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .soTeR, html code.shiki .soTeR{--shiki-light:#90A4AE;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sVsmf, html code.shiki .sVsmf{--shiki-light:#39ADB5;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sWKEy, html code.shiki .sWKEy{--shiki-light:#39ADB5;--shiki-default:#A0111F;--shiki-dark:#F97583}html pre.shiki code .sAK04, html code.shiki .sAK04{--shiki-light:#6182B8;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sqo_7, html code.shiki .sqo_7{--shiki-light:#39ADB5;--shiki-default:#032563;--shiki-dark:#9ECBFF}html pre.shiki code .s_jvP, html code.shiki .s_jvP{--shiki-light:#91B859;--shiki-default:#032563;--shiki-dark:#9ECBFF}html pre.shiki code .sNpir, html code.shiki .sNpir{--shiki-light:#F76D47;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sTy78, html code.shiki .sTy78{--shiki-light:#39ADB5;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .s-tzF, html code.shiki .s-tzF{--shiki-light:#E2931D;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sYEV4, html code.shiki .sYEV4{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#702C00;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sm80-, html code.shiki .sm80-{--shiki-light:#E53935;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sfdCM, html code.shiki .sfdCM{--shiki-light:#9C3EDA;--shiki-default:#A0111F;--shiki-dark:#F97583}html pre.shiki code .smmm7, html code.shiki .smmm7{--shiki-light:#F76D47;--shiki-default:#A0111F;--shiki-dark:#79B8FF}html pre.shiki code .str-j, html code.shiki .str-j{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#6E011A;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sBTIf, html code.shiki .sBTIf{--shiki-light:#6182B8;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sRXN5, html code.shiki .sRXN5{--shiki-light:#90A4AE;--shiki-default:#A0111F;--shiki-dark:#79B8FF}",{"title":34,"searchDepth":123,"depth":123,"links":1605},[1606,1607,1608,1609],{"id":71,"depth":104,"text":72},{"id":764,"depth":104,"text":764},{"id":954,"depth":104,"text":951},{"id":376,"depth":104,"text":376},"System font lookup and text measurement with HarfBuzz and fontTools.","md",{"category":1613},"reference",{"title":5},"\u002Freference\u002Ftypography",{"title":5,"description":1610},"reference\u002Ftypography","bb6WYmqr0fA8_z7hBsNXc26jjWntMx67ceJ7rmQWeUM",1780692544481]