Example #1
0
  public static void parseFontSettings(String value, StyledTextParagraph para) {
    // e.g. \Fkroeger|b0|i0|c238|p10 - font Kroeger, non-bold, non-italic, codepage 238, pitch 10

    StringTokenizer st = new StringTokenizer(value, "|");
    para.setFont(st.nextToken());

    while (st.hasMoreTokens()) {
      String option = st.nextToken();
      char code = option.charAt(0);
      int i = Integer.parseInt(option.substring(1));

      switch (code) {
        case 'b':
          para.setBold(i == 1);

          break;

        case 'i':
          para.setItalic(i == 1);

          break;

        case 'c':

          // codepage
          break;

        case 'p':

          // pitch
          break;
      }
    }
  }
Example #2
0
  public static void parseStyledTextParagraphSettings(
      char key, String value, StyledTextParagraph para) {
    if (value.length() > 0) {

      switch (key) {
        case 'A':
          para.setValign(Integer.parseInt(value));

          break;

        case 'H':
          if (value.endsWith("x")) {
            para.setFontHeight(
                para.getFontHeight() * Double.parseDouble(value.substring(0, value.length() - 1)));
          } else {
            para.setFontHeight(Double.parseDouble(value));
          }

          break;

        case 'Q':
          para.setObliquiAngle(Double.parseDouble(value));

          break;

        case 'W':
          if (value.endsWith("x")) {
            double widthFactor = Double.parseDouble(value.substring(0, value.length() - 1));
            para.setWidth(para.getWidth() * widthFactor);
          } else {
            para.setWidth(Double.parseDouble(value));
          }

          break;

        case 'T':
          para.setCharacterspace(Double.parseDouble(value));

          break;

        case 'f':
          parseFontSettings(value.trim(), para);

          break;

        case 'F':
          para.setFontFile(value.trim());

          break;

        case 'S':

          // TODO handle
          break;

        case 'C':
          Integer colorCode = Integer.valueOf(value);
          String rgbString = Color.getRGBString(colorCode);
          para.setColor(rgbString);

          break;
      }
    }
  }
Example #3
0
  public static TextDocument parseText(Text text) {
    TextDocument doc = new TextDocument();

    // boolean asciicontrol = false;
    StringBuffer buf = new StringBuffer();

    StyledTextParagraph p = new StyledTextParagraph();
    p.setFontHeight(text.getHeight());
    p.setInsertPoint(text.getAlignmentPoint());

    switch (text.getValign()) {
      case Text.VALIGN_BASELINE:
        if (text.getAlign() == Text.ALIGN_MIDDLE) {
          // described in the DXF specs
          p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_CENTER);
        } else {
          p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_BASELINE);
        }

        break;

      case Text.VALIGN_BOTTOM:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_BASELINE);

        break;

      case Text.VALIGN_CENTER:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_CENTER);

        break;

      case Text.VALIGN_TOP:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_TOP);

        break;
    }

    if ((text.getAlign() == 3) || (text.getAlign() == 5)) {
      double length = Utils.distance(text.getInsertPoint(), text.getAlignmentPoint());
      p.setWidth(length);
    }

    // parse the symbols
    String str = parseSymbols(text.getText());

    // parse the style
    int marker = 0;
    char c;

    // initialize
    boolean overline = false;
    boolean underline = false;

    for (int i = 0; i < str.length(); i++) {
      c = str.charAt(i);

      if (c == '%') {
        marker++;
      } else {
        if (marker == 0) {
          buf.append(c);
        } else if (marker == 2) {
          switch (c) {
            case 'o':
              p.setText(buf.toString());
              p.setUnderline(underline);
              p.setOverline(overline);
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);
              buf.delete(0, buf.length());
              overline = !overline;
              p.setOverline(overline);

              break;

            case 'u':
              p.setText(buf.toString());
              p.setUnderline(underline);
              p.setOverline(overline);
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);

              buf.delete(0, buf.length());
              underline = !underline;

              p.setUnderline(underline);

              break;
          }

          marker = 0;
        }
      }
    }

    if ((marker == 1) || (marker == 3)) {
      buf.append('%');
    }

    // something left over?
    if (buf.length() > 0) {
      p.setText(buf.toString());
      doc.addStyledParagraph(p);
    }

    return doc;
  }
Example #4
0
  protected static StyledTextParagraph createParagraphFromParent(StyledTextParagraph parent) {
    StyledTextParagraph p = new StyledTextParagraph();
    p.setValign(parent.getValign());
    p.setBold(parent.isBold());
    p.setFont(parent.getFont());
    p.setItalic(parent.isItalic());
    p.setUnderline(parent.isUnderline());
    p.setOverline(parent.isOverline());
    p.setWidth(parent.getWidth());
    p.setFontHeight(parent.getFontHeight());
    p.setInsertPoint(parent.getInsertPoint());
    p.setColor(parent.getColor());

    return p;
  }
Example #5
0
 private static StyledTextParagraph createParagraphFromMText(MText text) {
   StyledTextParagraph p = new StyledTextParagraph();
   p.setFontHeight(text.getHeight());
   p.setInsertPoint(text.getInsertPoint());
   return p;
 }
Example #6
0
  public static TextDocument parseMText(MText text) {
    // initialize
    TextDocument doc = new TextDocument();
    StringBuffer buf = new StringBuffer();
    StringBuffer value = new StringBuffer();
    StyledTextParagraph p = createParagraphFromMText(text);

    switch (text.getAlignment()) {
      case MText.ATTACHMENT_TOP_LEFT:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_TOP);

        break;

      case MText.ATTACHMENT_TOP_CENTER:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_TOP);

        break;

      case MText.ATTACHMENT_TOP_RIGHT:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_TOP);

        break;

      case MText.ATTACHMENT_MIDDLE_LEFT:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_CENTER);

        break;

      case MText.ATTACHMENT_MIDDLE_CENTER:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_CENTER);

        break;

      case MText.ATTACHMENT_MIDDLE_RIGHT:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_CENTER);

        break;

      case MText.ATTACHMENT_BOTTOM_LEFT:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_BASELINE);

        break;

      case MText.ATTACHMENT_BOTTOM_CENTER:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_BASELINE);

        break;

      case MText.ATTACHMENT_BOTTOM_RIGHT:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_BASELINE);

        break;

      default:
        p.setValign(StyledTextParagraph.VERTICAL_ALIGNMENT_BASELINE);

        break;
    }

    boolean formatting = false;
    boolean keyfollow = false;
    boolean complete = true;
    Stack<StyledTextParagraph> paras = new Stack<StyledTextParagraph>();
    int linecount = 0;
    int linePosition = 0;
    String str = text.getText();
    char key = ' ';

    // parse the symbols
    str = parseSymbols(str);

    // http://www.cadforum.cz/cadforum_en/text-formatting-codes-in-mtext-objects-tip8640

    // parse the style
    for (int i = 0; i < str.length(); i++) {
      char c = str.charAt(i);

      switch (c) {
        case '\\':
          if (formatting) {
            if (!complete) {
              parseStyledTextParagraphSettings(key, value.toString(), p);
              value.delete(0, value.length());
              formatting = true;
              keyfollow = true;
            } else {
              buf.append(c);
              formatting = false;
            }
          } else {
            formatting = true;
            keyfollow = true;
            complete = false;
          }

          break;

        case '~':
          if (formatting) {
            buf.append(c);
            formatting = false;
            keyfollow = false;
          }

          break;

        case ';':
          if (formatting) {
            parseStyledTextParagraphSettings(key, value.toString(), p);
            value.delete(0, value.length());
            formatting = false;
            complete = true;
            keyfollow = false;
          } else {
            buf.append(c);
          }

          break;

        case '}':
          if (formatting && keyfollow) {
            buf.append(c);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              // format change end
              if (buf.length() > 0) {
                p.setText(buf.toString());
                doc.addStyledParagraph(p);
                buf.delete(0, buf.length());
              }

              if (paras.size() > 0) {
                p = createParagraphFromParent((StyledTextParagraph) paras.pop());
              } else {
                p = createParagraphFromMText(text);
              }
            }
          }

          break;

        case '{':
          if (formatting && keyfollow) {
            buf.append(c);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              // start format change
              if (linePosition != 0) {
                p.setText(buf.toString());
                if (buf.length() > 0) {
                  doc.addStyledParagraph(p);
                  buf.delete(0, buf.length());
                }
                paras.add(p);
                p = createParagraphFromMText(text);
              }
            }
          }

          break;

        case 'O':
          if (formatting && keyfollow) {
            if (buf.length() > 0) {
              p.setText(buf.toString());
              buf.delete(0, buf.length());
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);
            }
            p.setOverline(true);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              buf.append(c);
            }
          }

          break;

        case 'o':
          if (formatting && keyfollow) {
            if (buf.length() > 0) {
              p.setText(buf.toString());
              buf.delete(0, buf.length());
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);
            }
            p.setOverline(false);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              buf.append(c);
            }
          }

          break;

        case 'u':
          if (formatting && keyfollow) {
            if (buf.length() > 0) {
              p.setText(buf.toString());
              buf.delete(0, buf.length());
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);
            }
            p.setUnderline(false);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              buf.append(c);
            }
          }

          break;

        case 'L':
          if (formatting && keyfollow) {
            if (buf.length() > 0) {
              p.setText(buf.toString());
              buf.delete(0, buf.length());
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);
            }
            p.setUnderline(true);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              buf.append(c);
            }
          }

          break;

        case 'l':
          if (formatting && keyfollow) {
            if (buf.length() > 0) {
              p.setText(buf.toString());
              buf.delete(0, buf.length());
              doc.addStyledParagraph(p);
              p = createParagraphFromParent(p);
            }
            p.setUnderline(false);
            formatting = false;
            keyfollow = false;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              buf.append(c);
            }
          }

          break;

        case 'P':
          if (formatting && keyfollow) {
            // end the current paragraph and set its newline flag
            p.setText(buf.toString());
            buf.delete(0, buf.length());
            p.setNewline(true);
            doc.addStyledParagraph(p);
            linecount++;

            // start a new line
            p = createParagraphFromParent(p);
            p.setLineIndex(linecount);

            formatting = false;
            keyfollow = false;
            linePosition = 0;
          } else {
            if (formatting) {
              value.append(c);
            } else {
              buf.append(c);
            }
          }

          break;

        default:
          if (formatting) {
            if (keyfollow) {
              key = c;
              keyfollow = false;
            } else {
              value.append(c);
            }
          } else {
            buf.append(c);
          }

          break;
      }

      linePosition++;
    }

    if (formatting) {
      parseStyledTextParagraphSettings(key, value.toString(), p);
    }

    if (buf.length() > 0) {
      p.setText(buf.toString());
      doc.addStyledParagraph(p);
    }

    if (doc.getParagraphCount() == 0) {
      doc.addStyledParagraph(p);
    }

    return doc;
  }