Advertisement
Tarferi

About pasting emoji into HTML text fields

Feb 11th, 2019
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.37 KB | None | 0 0
  1. private void setupFilter() {
  2.         final TransferHandler originalHandler = getTransferHandler();
  3.         setTransferHandler(new TransferHandler() {
  4.  
  5.             @Override
  6.             public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
  7.                 return originalHandler.canImport(comp, transferFlavors);
  8.             }
  9.  
  10.             @Override
  11.             public boolean canImport(TransferHandler.TransferSupport support) {
  12.                 return originalHandler.canImport(support);
  13.             }
  14.  
  15.             @Override
  16.             public void exportAsDrag(JComponent comp, InputEvent e, int action) {
  17.                 originalHandler.exportAsDrag(comp, e, action);
  18.             }
  19.  
  20.             @Override
  21.             public void exportToClipboard(JComponent comp, Clipboard clip, int action) {
  22.                 originalHandler.exportToClipboard(comp, clip, action);
  23.             }
  24.  
  25.             @Override
  26.             public Image getDragImage() {
  27.                 return originalHandler.getDragImage();
  28.             }
  29.  
  30.             @Override
  31.             public Point getDragImageOffset() {
  32.                 return originalHandler.getDragImageOffset();
  33.             }
  34.  
  35.             @Override
  36.             public int getSourceActions(JComponent c) {
  37.                 return originalHandler.getSourceActions(c);
  38.             }
  39.  
  40.             @Override
  41.             public Icon getVisualRepresentation(Transferable t) {
  42.                 return originalHandler.getVisualRepresentation(t);
  43.             }
  44.  
  45.             @Override
  46.             public boolean importData(JComponent comp, Transferable t) {
  47.                 return originalHandler.importData(comp, t);
  48.             }
  49.  
  50.             @Override
  51.             public boolean importData(TransferHandler.TransferSupport support) {
  52.                 Transferable t = support.getTransferable();
  53.                 if (t.isDataFlavorSupported(DataFlavor.getTextPlainUnicodeFlavor())) { // This is good
  54.                     String data;
  55.                     if (t.isDataFlavorSupported(DataFlavor.allHtmlFlavor)) { // Strip this
  56.                         try {
  57.                             data = (String) t.getTransferData(DataFlavor.allHtmlFlavor);
  58.                             if (data.contains("<body>")) {
  59.                                 data = data.replaceAll("\r", "").replaceAll("\n", "<br />").replaceAll("(.*<body>)(.*)(</body>.*)", "$2");
  60.                             }
  61.                             data = data.replaceAll("(<[^>]*>)", "");
  62.                         } catch (UnsupportedFlavorException | IOException e) {
  63.                             return false;
  64.                         }
  65.                     } else { // Raw text
  66.                         try {
  67.                             InputStream inputStream = (InputStream) t.getTransferData(DataFlavor.getTextPlainUnicodeFlavor());
  68.                             StringBuilder sb = new StringBuilder();
  69.                             while (true) {
  70.                                 int r = inputStream.read();
  71.                                 if (r < 0) {
  72.                                     break;
  73.                                 } else {
  74.                                     sb.append((char) r);
  75.                                     inputStream.read();
  76.                                 }
  77.                             }
  78.                             data = sb.toString();
  79.                         } catch (UnsupportedFlavorException | IOException e) {
  80.                             return false;
  81.                         }
  82.                     }
  83.                     data = EmojiParser.parseToHtmlHexadecimal(data);
  84.                     try {
  85.                         getDocument().insertString(getCaretPosition(), data, null);
  86.                         return true;
  87.                     } catch (BadLocationException e) {
  88.                         return false;
  89.                     }
  90.                 }
  91.                 return false;
  92.             }
  93.  
  94.             @Override
  95.             public void setDragImage(Image img) {
  96.                 originalHandler.setDragImage(img);
  97.             }
  98.  
  99.             @Override
  100.             public void setDragImageOffset(Point p) {
  101.                 originalHandler.setDragImageOffset(p);
  102.             }
  103.         });
  104.         StyledDocument styledDoc = getStyledDocument();
  105.         if (styledDoc instanceof AbstractDocument) {
  106.             AbstractDocument doc = (AbstractDocument) styledDoc;
  107.             doc.setDocumentFilter(myFilter);
  108.         }
  109.         Document doc = getDocument();
  110.         if (doc instanceof AbstractDocument) {
  111.             AbstractDocument pdoc = (AbstractDocument) doc;
  112.             pdoc.setDocumentFilter(myFilter);
  113.         }
  114.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement