+int InsetMathScript::dy01(int asc, int des, int what) const
+{
+ int dasc = 0;
+ int slevel = 0;
+ if (hasDown()) {
+ dasc = down().ascent();
+ slevel = nuc().slevel();
+ int ascdrop = dasc - slevel;
+ int desdrop = des + nuc().sshift();
+ int mindes = nuc().mindes();
+ des = max(desdrop, ascdrop);
+ des = max(mindes, des);
+ }
+ if (hasUp()) {
+ int minasc = nuc().minasc();
+ int ascdrop = asc - up().mindes();
+ int udes = up().descent();
+ asc = udes + nuc().sshift();
+ asc = max(ascdrop, asc);
+ asc = max(minasc, asc);
+ if (hasDown()) {
+ int del = asc - udes - dasc;
+ if (del + des <= 2) {
+ des = 2 - del;
+ del = slevel - asc + udes;
+ if (del > 0) {
+ asc += del;
+ des -= del;
+ }
+ }
+ }
+ }
+ return what ? asc : des;
+}
+
+