Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GitHub Sync #938

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -42,50 +42,42 @@ class JsonDeserializer extends Deserializer<MessageListJson> {

Message getMessage(dynamic message, [bool isTopLevel = false]) {
if (message is List) {
final typeOrId = message[0];
int start;
String? id;
if (isTopLevel && preamble.hasIds) {
start = 2;
id = message[1] as String;
} else {
start = 1;
}
if (typeOrId == PluralMessage.type) {
return _forPlural(message, start, id);
} else if (typeOrId == SelectMessage.type) {
return _forSelect(message, start, id);
} else if (typeOrId == CombinedMessage.type) {
return _forCombined(message, start, id);
} else if (typeOrId is String) {
return _forString(message, start - 1, typeOrId);
final type = message[0];
if (type == PluralMessage.type) {
return _forPlural(message);
} else if (type == SelectMessage.type) {
return _forSelect(message);
} else if (type == CombinedMessage.type) {
return _forCombined(message);
} else if (type is String) {
return _forString(message);
}
} else if (message is String) {
return StringMessage(message);
}
throw ArgumentError();
}

StringMessage _forString(List<dynamic> message, int start, String? id) {
final value = message[start] as String;
StringMessage _forString(List<dynamic> message) {
final value = message[0] as String;
final argPositions = <({int stringIndex, int argIndex})>[];
for (var i = start + 1; i < message.length; i++) {
for (var i = 1; i < message.length; i++) {
final pair = message[i] as List;
final stringIndex = pair[0];
final argIndex = pair[1];
argPositions.add((stringIndex: stringIndex, argIndex: argIndex));
}
return StringMessage(value, argPositions: argPositions, id: id);
return StringMessage(value, argPositions: argPositions);
}

PluralMessage _forPlural(List<dynamic> message, int start, String? id) {
final argIndex = message[start] as int;
final otherMessage = getMessage(message[start + 1]);
PluralMessage _forPlural(List<dynamic> message) {
final argIndex = message[1] as int;
final otherMessage = getMessage(message[2]);
Message? fewMessage;
Message? manyMessage;
final numberCases = <int, Message>{};
final wordCases = <int, Message>{};
final submessages = message[start + 2] as List;
final submessages = message[3] as List;
for (var i = 0; i < submessages.length - 1; i += 2) {
final msg = getMessage(submessages[i + 1]);
final messageMarker = submessages[i];
Expand All @@ -108,25 +100,20 @@ class JsonDeserializer extends Deserializer<MessageListJson> {
many: manyMessage,
argIndex: argIndex,
other: otherMessage,
id: id,
);
}

SelectMessage _forSelect(List<dynamic> message, int start, String? id) {
final argIndex = message[start] as int;
final otherCase = getMessage(message[start + 1]);
final submessages = message[start + 2] as Map;
SelectMessage _forSelect(List<dynamic> message) {
final argIndex = message[1] as int;
final otherCase = getMessage(message[2]);
final submessages = message[3] as Map;
final cases = submessages.map((caseName, caseMessage) => MapEntry(
caseName as String,
getMessage(caseMessage),
));
return SelectMessage(otherCase, cases, argIndex, id);
return SelectMessage(otherCase, cases, argIndex);
}

CombinedMessage _forCombined(List<dynamic> message, int start, String? id) {
return CombinedMessage(
id,
message.skip(start).map(getMessage).toList(),
);
}
CombinedMessage _forCombined(List<dynamic> message) =>
CombinedMessage(message.skip(1).map(getMessage).toList());
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
import 'plural_selector.dart';

sealed class Message {
final String? id;

Message(this.id);
Message();

String generateString(
List allArgs, {
Expand All @@ -20,7 +18,7 @@ sealed class Message {
final class CombinedMessage extends Message {
final List<Message> messages;

CombinedMessage(super.id, this.messages);
CombinedMessage(this.messages);

@override
String generateString(
Expand Down Expand Up @@ -49,8 +47,7 @@ final class StringMessage extends Message {
/// This list is expected to be sorted by `argPositions.stringIndex`
final List<({int stringIndex, int argIndex})> argPositions;

StringMessage(this.value, {this.argPositions = const [], String? id})
: super(id);
StringMessage(this.value, {this.argPositions = const [], String? id});

static const int type = 1;

Expand Down Expand Up @@ -97,7 +94,7 @@ final class PluralMessage extends Message {
required this.other,
required this.argIndex,
String? id,
}) : super(id);
});

static const int type = 3;

Expand Down Expand Up @@ -125,12 +122,12 @@ final class SelectMessage extends Message {
final Message other;
final Map<String, Message> cases;
final int argIndex;

SelectMessage(
this.other,
this.cases,
this.argIndex, [
super.id,
]);
this.argIndex,
);

static const int type = 4;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,14 @@ abstract class Preamble {

String get hash;

bool get hasIds;

static int length = 4;
static int length = 3;
}

abstract class MessageList {
Preamble get preamble;
PluralSelector get pluralSelector;

String generateStringAtIndex(int index, List args);

String generateStringAtId(String id, List args);
}

sealed class PluralMarker {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,10 @@ class JsonPreamble extends Preamble {
required int serializationVersion,
required String locale,
required String hash,
required bool hasIds,
}) : _data = [
serializationVersion,
locale,
hash,
hasIds ? 1 : 0,
];

JsonPreamble.parse(this._data);
Expand All @@ -33,9 +31,6 @@ class JsonPreamble extends Preamble {

@override
String get hash => _data[2] as String;

@override
bool get hasIds => _data[3] == 1;
}

class MessageListJson extends MessageList {
Expand All @@ -60,12 +55,6 @@ class MessageListJson extends MessageList {
factory MessageListJson.fromString(String string, PluralSelector intl) =>
JsonDeserializer(string).deserialize(intl);

@override
String generateStringAtId(String id, List args) => messages
.where((element) => element.id == id)
.first
.generateString(args, locale: preamble.locale, pluralSelector: _selector);

@override
String generateStringAtIndex(int index, List args) =>
messages[getIndex(index)].generateString(args,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ void main() {
serializationVersion: serializationVersion,
locale: 'en_US',
hash: 'hash',
hasIds: false,
),
[
StringMessage('Hello World'),
Expand Down Expand Up @@ -64,7 +63,6 @@ void main() {
null,
);

expect(messageList.preamble.hasIds, false);
expect(messageList.preamble.locale, 'en_US');
expect(messageList.generateStringAtIndex(0, []), 'Hello World');
expect(messageList.generateStringAtIndex(1, ['case1']), 'Case case1');
Expand Down
Loading