code: public static CodeRangeBuffer orCodeRangeBuff(ScanEnvironment env, CodeRangeBuffer bbuf1, boolean not1,
                                                                  CodeRangeBuffer bbuf2, boolean not2) {
          CodeRangeBuffer pbuf = null;
  
          if (bbuf1 == null && bbuf2 == null) {
              if (not1 || not2) {
                  return setAllMultiByteRange(env, pbuf);
              }
              return null;
          }
  
          if (bbuf2 == null) {
              CodeRangeBuffer tbuf;
              boolean tnot;
              // swap
              tnot = not1; not1 = not2; not2 = tnot;
              tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf;
          }
  
          if (bbuf1 == null) {
              if (not1) {
                  return setAllMultiByteRange(env, pbuf);
              } else {
                  if (!not2) {
                      return bbuf2.clone();
                  } else {
                      return notCodeRangeBuff(env, bbuf2);
                  }
              }
          }
  
          if (not1) {
              CodeRangeBuffer tbuf;
              boolean tnot;
              // swap
              tnot = not1; not1 = not2; not2 = tnot;
              tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf;
          }
  
          if (!not2 && !not1) { /* 1 OR 2 */
              pbuf = bbuf2.clone();
          } else if (!not1) { /* 1 OR (not 2) */
              pbuf = notCodeRangeBuff(env, bbuf2);
          }
  
          int[]p1 = bbuf1.p;
          int n1 = p1[0];
  
          for (int i=0; i<n1; i++) {
              int from = p1[i * 2 + 1];
              int to = p1[i * 2 + 2];
              pbuf = addCodeRangeToBuff(pbuf, env, from, to);
          }
  
          return pbuf;
      }
docs: or_code_range_buf