code: private void fixN0c(BracketData bd, int openingIndex, int newPropPosition, byte newProp) {
          /* This function calls itself recursively */
          IsoRun pLastIsoRun = bd.isoRuns[bd.isoRunLast];
          Opening qOpening;
          int k, openingPosition, closingPosition;
          for (k = openingIndex+1; k < pLastIsoRun.limit; k++) {
              qOpening = bd.openings[k];
              if (qOpening.match >= 0)    /* not an N0c match */
                  continue;
              if (newPropPosition < qOpening.contextPos)
                  break;
              if (newPropPosition >= qOpening.position)
                  continue;
              if (newProp == qOpening.contextDir)
                  break;
              openingPosition = qOpening.position;
              dirProps[openingPosition] = newProp;
              closingPosition = -(qOpening.match);
              dirProps[closingPosition] = newProp;
              qOpening.match = 0;                                 /* prevent further changes */
              fixN0c(bd, k, openingPosition, newProp);
              fixN0c(bd, k, closingPosition, newProp);
          }
      }
docs: /* change N0c1 to N0c2 when a preceding bracket is assigned the embedding level