Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

111
LINES

< > BotCompany Repo | #1032173 // tok_multiTypeArguments_v2 [certain multi-typed arguments for functions, run after most JavaX translations, LIVE]

JavaX fragment (include) [tags: use-pretranspiled]

Transpiled version (11385L) is out of date.

1  
// example:
2  
// sS loadTextFile(File/S file) { ... }
3  
4  
svoid tok_multiTypeArguments_v2(LS tok) {
5  
  int i;
6  
  
7  
  // File/S
8  
  
9  
  while ((i = jfind(tok, "File/<id> <id>", (_tok, nIdx) ->
10  
    eqGetOneOf(_tok, nIdx+5, "S", "String"))) >= 0) {
11  
      
12  
    S argName = tok.get(i+6);
13  
    S mainType = tok.get(i), altType = tok.get(i+4);
14  
    S converter = "newFile";
15  
    S expr = converter + "(" + argName + ")";
16  
    
17  
    tok_expandMultiTypeArgument(tok,
18  
      i, i+8,
19  
      argName,
20  
      mainType, altType, expr);
21  
  }
22  
  
23  
  // Graphics2D etc, IIntegralImage etc, ...
24  
  
25  
  while ((i = jfind(tok, "<id> etc <id>")) >= 0) {
26  
    S mainType = tok.get(i);
27  
    S argName = tok.get(i+4);
28  
    int iArgEnd = i+6;
29  
 
30  
    new LPairS alts; // altType, converter
31  
    bool v3;
32  
    if (eq(mainType, "Graphics2D"))
33  
      alts.add(pair("BufferedImage", "graphics"));
34  
    else if (eq(mainType, "File"))
35  
      alts.add(pair("String", "toFile"));
36  
    else if (eq(mainType, "BWImage"))
37  
      alts.add(pair("BufferedImage", "toBWImage"));
38  
    else if (eq(mainType, "IIntegralImage")) {
39  
      alts.add(pair("BufferedImage", "IntegralImage"));
40  
      alts.add(pair("MakesBufferedImage", "IntegralImage"));
41  
    } else if (eq(mainType, "BufferedImage"))
42  
      alts.add(pair("MakesBufferedImage", "toBufferedImage"));
43  
    else if (eq(mainType, "Runnable"))
44  
      alts.add(pair("IF0", "if0ToRunnable"));
45  
    else if (eq(mainType, "Component"))
46  
      alts.add(pair("Swingable", "toComponent"));
47  
    else if (eq(mainType, "JComponent"))
48  
      alts.add(pair("Swingable", "toJComponent"));
49  
    else if (eq(mainType, "WidthAndHeight")) {
50  
      alts.add(pair("Dimension", "toWidthAndHeight"));
51  
      alts.add(pair("int \*argName*/_w, int \*argName*/_h",
52  
        "widthAndHeight(\*argName*/_w, \*argName*/_h)"));
53  
      set v3;
54  
    } else if (eq(mainType, "Pt")) {
55  
      alts.add(pair("int \*argName*/_x, int \*argName*/_y",
56  
        "pt(\*argName*/_x, \*argName*/_y)"));
57  
      set v3;
58  
    } else if (eqOneOf(mainType, "DoublePt", "IDoublePt")) {
59  
      alts.add(pair("double \*argName*/_x, double \*argName*/_y",
60  
        "doublePt(\*argName*/_x, \*argName*/_y)"));
61  
      set v3;
62  
    }
63  
    
64  
    if (empty(alts))
65  
      fail("Unknown multi-type: " + joinSubList(tok, i, iArgEnd));
66  
      
67  
    if (v3)
68  
      tok_expandMultiTypeArgument_v3(tok,
69  
        i, iArgEnd,
70  
        argName,
71  
        mainType, alts);
72  
    else
73  
      tok_expandMultiTypeArgument_v2(tok,
74  
        i, iArgEnd,
75  
        argName,
76  
        mainType, alts);
77  
  }  
78  
  
79  
  // Iterable<X> or X[], Iterable<> or X...
80  
  
81  
  IntRange r;
82  
  for (S modifier : ll("[]", "..."))
83  
    while ((r = jfind_range(tok, "Iterable<<id>> or <id>" + modifier + " <id>")) != null) {
84  
      i = r.start+1;
85  
      S mainType = joinSubList(tok, i, i+7);
86  
      S altType = joinSubList(tok, i+10, r.end-3);
87  
      S argName = tok.get(r.end-2);
88  
      S converter = "asList";
89  
      S expr = converter + "(" + argName + ")";
90  
      
91  
      tok_expandMultiTypeArgument(tok, i, r.end, argName, mainType, altType, expr);
92  
    }
93  
    
94  
  // Iterable or O[], Iterable or X..., Cl/O[], etc
95  
    
96  
  for (S modifier : ll("[]", "..."))
97  
    while ((r = jfind_range(tok, "<id> * *" + modifier + " <id>", func(LS tok, int nIdx) {
98  
      eqOneOf(tok.get(nIdx+1), "Iterable", "Collection", "Cl", "List", "L")
99  
      && eqGetOneOf(tok, nIdx+3, "or", "/")
100  
      && eqGetOneOf(tok, nIdx+5, "O", "Object")
101  
    })) != null) {
102  
      i = r.start+1;
103  
      S mainType = tok.get(i);
104  
      S altType = joinSubList(tok, i+4, r.end-3);
105  
      S argName = tok.get(r.end-2);
106  
      S converter = "asList";
107  
      S expr = converter + "(" + argName + ")";
108  
      
109  
      tok_expandMultiTypeArgument(tok, i, r.end, argName, mainType, altType, expr);
110  
    }
111  
}

Author comment

Began life as a copy of #1031905

download  show line numbers  debug dex  old transpilations   

Travelled to 4 computer(s): bhatertpkbcr, mowyntqkapby, mqqgnosmbjvj, pyentgdyhuwx

No comments. add comment

Snippet ID: #1032173
Snippet name: tok_multiTypeArguments_v2 [certain multi-typed arguments for functions, run after most JavaX translations, LIVE]
Eternal ID of this version: #1032173/36
Text MD5: e1bb6231943cf0303950d48ea79fbd0f
Author: stefan
Category: javax
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2022-12-17 15:01:08
Source code size: 3790 bytes / 111 lines
Pitched / IR pitched: No / No
Views / Downloads: 220 / 394
Version history: 35 change(s)
Referenced in: [show references]