Skip to content

Commit b1c9d68

Browse files
committed
initial commit for rfw_txt
1 parent b2519b0 commit b1c9d68

27 files changed

+708
-62
lines changed

melos.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ packages:
55
- packages/rfw2txt
66
- packages/widget2rfw
77
- packages/rfw_builder
8-
- packages/rfw_tools
8+
- packages/rfw_txt
99

1010
scripts:
1111
add_sort:

packages/rfw_tools/bin/rfw2txt.dart

Lines changed: 0 additions & 3 deletions
This file was deleted.

packages/rfw_tools/bin/txt2rfw.dart

Lines changed: 0 additions & 3 deletions
This file was deleted.

packages/rfw_tools/lib/rfw_tools.dart

Whitespace-only changes.

packages/rfw_tools/melos_rfw_tools.iml

Lines changed: 0 additions & 16 deletions
This file was deleted.

packages/rfw_tools/pubspec.yaml

Lines changed: 0 additions & 20 deletions
This file was deleted.

packages/rfw_tools/test/rfw_tools_test.dart

Lines changed: 0 additions & 7 deletions
This file was deleted.
File renamed without changes.
File renamed without changes.
File renamed without changes.

packages/rfw_txt/bin/rfw2txt.dart

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import 'dart:io';
2+
3+
import 'package:args/args.dart';
4+
import 'package:path/path.dart';
5+
import 'package:yaml/yaml.dart';
6+
7+
import 'package:rfw_txt/src/rfw2txt.dart';
8+
9+
ArgParser buildParser() {
10+
return ArgParser()
11+
..addFlag(
12+
'help',
13+
abbr: 'h',
14+
negatable: false,
15+
help: 'Print this usage information.',
16+
)
17+
..addFlag(
18+
'verbose',
19+
negatable: false,
20+
help: 'Show additional command output.',
21+
)
22+
..addFlag(
23+
'version',
24+
abbr: 'v',
25+
negatable: false,
26+
help: 'Print the tool version.',
27+
)
28+
..addOption('output', abbr: 'o', help: 'Output path.');
29+
}
30+
31+
void printUsage(ArgParser argParser) {
32+
print('Usage: rfw2txt <flags> [arguments]');
33+
print(argParser.usage);
34+
}
35+
36+
void main(List<String> arguments) {
37+
final ArgParser argParser = buildParser();
38+
try {
39+
final ArgResults results = argParser.parse(arguments);
40+
bool verbose = false;
41+
42+
// Process the parsed arguments.
43+
if (results.wasParsed('help')) {
44+
printUsage(argParser);
45+
return;
46+
}
47+
if (results.wasParsed('version')) {
48+
String version = '0.0.1';
49+
try {
50+
File pubspecFile = File('pubspec.yaml');
51+
version = loadYaml(pubspecFile.readAsStringSync())['version'];
52+
} catch (e) {
53+
print(e);
54+
}
55+
56+
print('rfw2txt version: $version');
57+
return;
58+
}
59+
if (results.wasParsed('verbose')) {
60+
verbose = true;
61+
}
62+
63+
if (verbose) {
64+
print('[VERBOSE] All arguments: ${results.arguments}');
65+
}
66+
67+
String outputPath = '';
68+
if (results.wasParsed('output')) {
69+
outputPath = results['output'] as String;
70+
}
71+
72+
if (results.arguments.isEmpty) {
73+
print('No rfw path provided.');
74+
printUsage(argParser);
75+
return;
76+
}
77+
78+
// check if file exists
79+
String rfwPath = results.arguments[0];
80+
File rfwFile = File(rfwPath);
81+
if (!rfwFile.existsSync()) {
82+
print('File not found: $rfwPath');
83+
return;
84+
}
85+
86+
if (outputPath.isEmpty) {
87+
outputPath = '${basenameWithoutExtension(rfwPath)}.rfwtxt';
88+
}
89+
File outputFile = File(outputPath);
90+
outputFile.writeAsStringSync(rfw2txt(rfwFile.readAsBytesSync()));
91+
} on FormatException catch (e) {
92+
// Print usage information if an invalid argument was provided.
93+
print(e.message);
94+
printUsage(argParser);
95+
}
96+
}

packages/rfw_tools/bin/rfw_tools.dart renamed to packages/rfw_txt/bin/txt2rfw.dart

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
import 'dart:io';
2+
13
import 'package:args/args.dart';
4+
import 'package:path/path.dart';
5+
import 'package:yaml/yaml.dart';
26

3-
const String version = '0.0.1';
7+
import 'package:rfw_txt/src/txt2rfw.dart';
48

59
ArgParser buildParser() {
610
return ArgParser()
@@ -20,11 +24,12 @@ ArgParser buildParser() {
2024
'version',
2125
negatable: false,
2226
help: 'Print the tool version.',
23-
);
27+
)
28+
..addOption('output', abbr: 'o', help: 'Output path.');
2429
}
2530

2631
void printUsage(ArgParser argParser) {
27-
print('Usage: dart rfw_tools.dart <flags> [arguments]');
32+
print('Usage: txt2rfw <flags> [arguments]');
2833
print(argParser.usage);
2934
}
3035

@@ -40,22 +45,55 @@ void main(List<String> arguments) {
4045
return;
4146
}
4247
if (results.wasParsed('version')) {
43-
print('rfw_tools version: $version');
48+
String version = '0.0.1';
49+
try {
50+
File pubspecFile = File('pubspec.yaml');
51+
version = loadYaml(pubspecFile.readAsStringSync())['version'];
52+
} catch (e) {
53+
print(e);
54+
}
55+
56+
print('rfw2txt version: $version');
4457
return;
4558
}
59+
4660
if (results.wasParsed('verbose')) {
4761
verbose = true;
4862
}
4963

5064
// Act on the arguments provided.
51-
print('Positional arguments: ${results.rest}');
5265
if (verbose) {
5366
print('[VERBOSE] All arguments: ${results.arguments}');
5467
}
68+
69+
String outputPath = '';
70+
if (results.wasParsed('output')) {
71+
outputPath = results['output'] as String;
72+
}
73+
74+
if (results.arguments.isEmpty) {
75+
print('No rfwtxt path provided.');
76+
printUsage(argParser);
77+
return;
78+
}
79+
80+
// check if file exists
81+
String txtPath = results.arguments[0];
82+
File txtFile = File(txtPath);
83+
if (!txtFile.existsSync()) {
84+
print('File not found: $txtPath');
85+
return;
86+
}
87+
88+
if (outputPath.isEmpty) {
89+
outputPath = '${basenameWithoutExtension(txtPath)}.rfw';
90+
}
91+
File outputFile = File(outputPath);
92+
93+
outputFile.writeAsBytesSync(txt2rfw(txtFile.readAsStringSync()));
5594
} on FormatException catch (e) {
5695
// Print usage information if an invalid argument was provided.
5796
print(e.message);
58-
print('');
5997
printUsage(argParser);
6098
}
6199
}

packages/rfw_txt/data/test1.rfw

552 Bytes
Binary file not shown.

packages/rfw_txt/data/test1.rfwtxt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import core.widgets;
2+
import core.material;
3+
4+
widget hello = Scaffold(
5+
appBar: AppBar(title: Text(text: "Hello Demo")),
6+
body: Container(
7+
height: 100,
8+
color: 0xFF00FF00,
9+
child: Center(
10+
child: Text(text: ["Hello, ", data.greet.name, '!'], textDirection: "ltr", style: {
11+
color: 0xFFFF0000
12+
}),
13+
),
14+
));

packages/rfw_txt/data/test2.rfw

1.73 KB
Binary file not shown.

packages/rfw_txt/data/test2.rfwtxt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import core.widgets;
2+
import core.material;
3+
4+
widget Empty = Container();
5+
6+
widget Counter = Container(
7+
color: 0xFF66AACC,
8+
child: Center(
9+
child: Button(
10+
child: Padding(
11+
padding: [ 20.0 ],
12+
child: Text(text: data.counter, style: {
13+
fontSize: 56.0,
14+
color: 0xFF000000,
15+
}),
16+
),
17+
onPressed: event "increment" { },
18+
),
19+
),
20+
);
21+
22+
widget Button { down: false } = GestureDetector(
23+
onTap: args.onPressed,
24+
onTapDown: set state.down = true,
25+
onTapUp: set state.down = false,
26+
onTapCancel: set state.down = false,
27+
child: Container(
28+
duration: 50,
29+
margin: switch state.down {
30+
false: [ 0.0, 0.0, 2.0, 2.0 ],
31+
true: [ 2.0, 2.0, 0.0, 0.0 ],
32+
},
33+
padding: [ 12.0, 8.0 ],
34+
decoration: {
35+
type: "shape",
36+
shape: {
37+
type: "stadium",
38+
side: { width: 1.0 },
39+
},
40+
gradient: {
41+
type: "linear",
42+
begin: { x: -0.5, y: -0.25 },
43+
end: { x: 0.0, y: 0.5 },
44+
colors: [ 0xFFFFFF99, 0xFFEEDD00 ],
45+
stops: [ 0.0, 1.0 ],
46+
tileMode: "mirror",
47+
},
48+
shadows: switch state.down {
49+
false: [ { blurRadius: 4.0, spreadRadius: 0.5, offset: { x: 1.0, y: 1.0, } } ],
50+
default: [],
51+
},
52+
},
53+
child: DefaultTextStyle(
54+
style: {
55+
color: 0xFF000000,
56+
fontSize: 32.0,
57+
},
58+
child: args.child,
59+
),
60+
),
61+
);

packages/rfw_txt/lib/rfw_txt.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
library rfw_txt;
2+
3+
export 'src/txt2rfw.dart';

packages/rfw_txt/lib/src/rfw2txt.dart

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import 'dart:typed_data';
2+
3+
import 'package:collection/collection.dart';
4+
import 'package:rfw/formats.dart';
5+
6+
import 'rwl2json.dart';
7+
import 'rwl2txt.dart';
8+
9+
// Parse .rfw to .rfwtxt
10+
String rfw2txt(Uint8List bytes) {
11+
RemoteWidgetLibrary rwl = decodeLibraryBlob(bytes);
12+
String output = rwl2txt(rwl);
13+
if (ListEquality()
14+
.equals(bytes, encodeLibraryBlob(parseLibraryFile(output))) ==
15+
false) {
16+
throw Exception('rfw2txt failed');
17+
}
18+
return output;
19+
}
20+
21+
// Parse .rfw to json
22+
Map<String, dynamic> rfw2json(Uint8List bytes) {
23+
RemoteWidgetLibrary rwl = decodeLibraryBlob(bytes);
24+
return rwl2json(rwl);
25+
}

0 commit comments

Comments
 (0)