Release RuleGel 1.0.1 with Realbooru
This commit is contained in:
@@ -55,6 +55,7 @@ class GelbooruMapper {
|
||||
|
||||
static List<dynamic> _extractItems(dynamic data) {
|
||||
if (data is List) return data;
|
||||
if (data is String) return _extractItemsFromText(data);
|
||||
if (data is Map) {
|
||||
final posts = data['post'] ?? data['posts'];
|
||||
if (posts is List) return posts;
|
||||
@@ -64,6 +65,26 @@ class GelbooruMapper {
|
||||
return const [];
|
||||
}
|
||||
|
||||
static List<Map<String, dynamic>> _extractItemsFromText(String text) {
|
||||
final items = <Map<String, dynamic>>[];
|
||||
for (final match
|
||||
in RegExp(r'<post\b([^>]*)/?>', caseSensitive: false, dotAll: true)
|
||||
.allMatches(text)) {
|
||||
final attrs = _attributes(match.group(1) ?? '');
|
||||
if (attrs.isNotEmpty) items.add(attrs);
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
static Map<String, dynamic> _attributes(String source) {
|
||||
final result = <String, dynamic>{};
|
||||
for (final match in RegExp(r'''([A-Za-z0-9_:-]+)\s*=\s*["']([^"']*)["']''')
|
||||
.allMatches(source)) {
|
||||
result[match.group(1)!] = _decodeEntities(match.group(2) ?? '');
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
static List<String> _tags(dynamic value) {
|
||||
if (value is List) return value.map((tag) => tag.toString()).toList();
|
||||
return _string(value)
|
||||
@@ -128,4 +149,14 @@ class GelbooruMapper {
|
||||
add('meta', json['tag_string_meta'] ?? json['tags_meta']);
|
||||
return groups;
|
||||
}
|
||||
|
||||
static String _decodeEntities(String value) {
|
||||
return value
|
||||
.replaceAll('&', '&')
|
||||
.replaceAll('<', '<')
|
||||
.replaceAll('>', '>')
|
||||
.replaceAll('"', '"')
|
||||
.replaceAll(''', "'")
|
||||
.replaceAll(''', "'");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user