11package org .dflib .jjava .jupyter .kernel .magic ;
22
3+ import org .dflib .jjava .jupyter .kernel .BaseNotebookStatics ;
4+
35import java .util .Base64 ;
46import java .util .regex .Matcher ;
57import java .util .regex .Pattern ;
@@ -12,9 +14,13 @@ public class MagicTranspiler {
1214
1315 private static final Pattern UNESCAPED_QUOTE = Pattern .compile ("(?<!\\ \\ )\" " );
1416
17+ // generated code templates
18+ private static final String CELL_CALL_TEMPLATE = BaseNotebookStatics .class .getName () + ".cellMagic(%s,java.util.List.of(%s),%s);{};" ;
19+ private static final String LINE_CALL_TEMPLATE = BaseNotebookStatics .class .getName () + ".lineMagic(%s,java.util.List.of(%s));{};" ;
20+ private static final String DECODE_TEMPLATE = "new String(java.util.Base64.getDecoder().decode(\" %s\" ))" ;
21+
1522 public String transpileCell (ParsedCellMagic magic ) {
16- return String .format (
17- "org.dflib.jjava.jupyter.kernel.NotebookStatics.cellMagic(%s,java.util.List.of(%s),%s);{};" ,
23+ return String .format (CELL_CALL_TEMPLATE ,
1824 argWithEscapingToJava (magic .magicCall .name ),
1925 magic .magicCall .args .stream ()
2026 .map (this ::argWithEscapingToJava )
@@ -35,8 +41,7 @@ public String transpileLine(ParsedLineMagic magic) {
3541 return magic .raw ;
3642 }
3743
38- return String .format (
39- "org.dflib.jjava.jupyter.kernel.NotebookStatics.lineMagic(%s,java.util.List.of(%s));{};" ,
44+ return String .format (LINE_CALL_TEMPLATE ,
4045 argWithEscapingToJava (magic .magicCall .name ),
4146 magic .magicCall .args .stream ()
4247 .map (this ::argWithEscapingToJava )
@@ -47,6 +52,6 @@ public String transpileLine(ParsedLineMagic magic) {
4752 // Poor man's string escape
4853 private String argWithEscapingToJava (String arg ) {
4954 String encoded = Base64 .getEncoder ().encodeToString (arg .getBytes ());
50- return String .format ("new String(java.util.Base64.getDecoder().decode( \" %s \" ))" , encoded );
55+ return String .format (DECODE_TEMPLATE , encoded );
5156 }
5257}
0 commit comments