diff --git a/android/gradle.properties b/android/gradle.properties index d9abd55731010fe508f39321892e8002f10e79ef..663881258a10822c0b4abc064b6e0bc0ccf48833 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.0.12 -app.versionCode=12 +app.versionName=0.0.13 +app.versionCode=13 diff --git a/assets/voices/en-left-foot-on-blue.wav b/assets/voices/en-left-foot-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..3ce14dfcbb5c625e87e4c88ba92a231d1db0b2f7 Binary files /dev/null and b/assets/voices/en-left-foot-on-blue.wav differ diff --git a/assets/voices/en-left-foot-on-green.wav b/assets/voices/en-left-foot-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..32581e8d3a2ee9c4090f582449dbeb7b294e75cf Binary files /dev/null and b/assets/voices/en-left-foot-on-green.wav differ diff --git a/assets/voices/en-left-foot-on-red.wav b/assets/voices/en-left-foot-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..af072e523d4db1c982177349aed8a78bef8ee4f8 Binary files /dev/null and b/assets/voices/en-left-foot-on-red.wav differ diff --git a/assets/voices/en-left-foot-on-yellow.wav b/assets/voices/en-left-foot-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..a1da86c8328d7b943162e914de638c294c3130e7 Binary files /dev/null and b/assets/voices/en-left-foot-on-yellow.wav differ diff --git a/assets/voices/en-left-hand-on-blue.wav b/assets/voices/en-left-hand-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..af8badeed75ea2d6459e49f8df2841a87a92f0a4 Binary files /dev/null and b/assets/voices/en-left-hand-on-blue.wav differ diff --git a/assets/voices/en-left-hand-on-green.wav b/assets/voices/en-left-hand-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..351778d1c29fcf99786bb9b4f022ad3bc301a997 Binary files /dev/null and b/assets/voices/en-left-hand-on-green.wav differ diff --git a/assets/voices/en-left-hand-on-red.wav b/assets/voices/en-left-hand-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..b0332eb291992be10d125e3b510c7738a5e159f7 Binary files /dev/null and b/assets/voices/en-left-hand-on-red.wav differ diff --git a/assets/voices/en-left-hand-on-yellow.wav b/assets/voices/en-left-hand-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..d6728058ad4003d6b1e92541585f9644f27db299 Binary files /dev/null and b/assets/voices/en-left-hand-on-yellow.wav differ diff --git a/assets/voices/en-right-foot-on-blue.wav b/assets/voices/en-right-foot-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..5b93c58647bf3d831db05e2c8eceb65304148f06 Binary files /dev/null and b/assets/voices/en-right-foot-on-blue.wav differ diff --git a/assets/voices/en-right-foot-on-green.wav b/assets/voices/en-right-foot-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..3172e67bdac633bc39f06b098477bbf155ecda78 Binary files /dev/null and b/assets/voices/en-right-foot-on-green.wav differ diff --git a/assets/voices/en-right-foot-on-red.wav b/assets/voices/en-right-foot-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..0660993a21cd12a90cc27fba84a6addc2ee1dd3b Binary files /dev/null and b/assets/voices/en-right-foot-on-red.wav differ diff --git a/assets/voices/en-right-foot-on-yellow.wav b/assets/voices/en-right-foot-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..0dcded666461de717dd65f95f9d5138e0cccbc79 Binary files /dev/null and b/assets/voices/en-right-foot-on-yellow.wav differ diff --git a/assets/voices/en-right-hand-on-blue.wav b/assets/voices/en-right-hand-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..726c8081a0b3cfea488286f3271e6c7635f9619c Binary files /dev/null and b/assets/voices/en-right-hand-on-blue.wav differ diff --git a/assets/voices/en-right-hand-on-green.wav b/assets/voices/en-right-hand-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..c621f66674fab51857e67befe58cde637f5dd8e2 Binary files /dev/null and b/assets/voices/en-right-hand-on-green.wav differ diff --git a/assets/voices/en-right-hand-on-red.wav b/assets/voices/en-right-hand-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..96dc5a738290f155ae46cf5c05af70ad3e993c02 Binary files /dev/null and b/assets/voices/en-right-hand-on-red.wav differ diff --git a/assets/voices/en-right-hand-on-yellow.wav b/assets/voices/en-right-hand-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..33b2b1c876495fd3bfb9399398e7cc34acb20e98 Binary files /dev/null and b/assets/voices/en-right-hand-on-yellow.wav differ diff --git a/assets/voices/fr-left-foot-on-blue.wav b/assets/voices/fr-left-foot-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..e29dcbff3c4d1e82d1f40e60794436911e095b7f Binary files /dev/null and b/assets/voices/fr-left-foot-on-blue.wav differ diff --git a/assets/voices/fr-left-foot-on-green.wav b/assets/voices/fr-left-foot-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..b5a8ba453a1ca4eb6b67e142b250721faad75c6d Binary files /dev/null and b/assets/voices/fr-left-foot-on-green.wav differ diff --git a/assets/voices/fr-left-foot-on-red.wav b/assets/voices/fr-left-foot-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..bc08a1a6bb5f82a41fffa433bbb4ac81f2b86da5 Binary files /dev/null and b/assets/voices/fr-left-foot-on-red.wav differ diff --git a/assets/voices/fr-left-foot-on-yellow.wav b/assets/voices/fr-left-foot-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..99307f72886cd56393f977d423045be2cdc8bebe Binary files /dev/null and b/assets/voices/fr-left-foot-on-yellow.wav differ diff --git a/assets/voices/fr-left-hand-on-blue.wav b/assets/voices/fr-left-hand-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..05a5b857a7990eb741c65d1d10417c13d2a0437b Binary files /dev/null and b/assets/voices/fr-left-hand-on-blue.wav differ diff --git a/assets/voices/fr-left-hand-on-green.wav b/assets/voices/fr-left-hand-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..e693a8513b4248cf1499199d816a5f6028ec5937 Binary files /dev/null and b/assets/voices/fr-left-hand-on-green.wav differ diff --git a/assets/voices/fr-left-hand-on-red.wav b/assets/voices/fr-left-hand-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..73f8a38534863e2a06f915e10742693c399f5c24 Binary files /dev/null and b/assets/voices/fr-left-hand-on-red.wav differ diff --git a/assets/voices/fr-left-hand-on-yellow.wav b/assets/voices/fr-left-hand-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..87a39bf9a544d2304fdbbbcc78b404b9739a90b7 Binary files /dev/null and b/assets/voices/fr-left-hand-on-yellow.wav differ diff --git a/assets/voices/fr-right-foot-on-blue.wav b/assets/voices/fr-right-foot-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..58f8f9b588ac1db4648c83dd72e676e4fb0845f8 Binary files /dev/null and b/assets/voices/fr-right-foot-on-blue.wav differ diff --git a/assets/voices/fr-right-foot-on-green.wav b/assets/voices/fr-right-foot-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..8861440187d677e48b7a62bb02c3cf9d689d2975 Binary files /dev/null and b/assets/voices/fr-right-foot-on-green.wav differ diff --git a/assets/voices/fr-right-foot-on-red.wav b/assets/voices/fr-right-foot-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..49306bbfdb1d29d7cdfd85bfabe868c1c617a38f Binary files /dev/null and b/assets/voices/fr-right-foot-on-red.wav differ diff --git a/assets/voices/fr-right-foot-on-yellow.wav b/assets/voices/fr-right-foot-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..e6df6d11d64da34e54c54f5463ae539a6b08bc26 Binary files /dev/null and b/assets/voices/fr-right-foot-on-yellow.wav differ diff --git a/assets/voices/fr-right-hand-on-blue.wav b/assets/voices/fr-right-hand-on-blue.wav new file mode 100644 index 0000000000000000000000000000000000000000..9eb0a1d4bfce2b6dc86cc14e2038064150f4f5c3 Binary files /dev/null and b/assets/voices/fr-right-hand-on-blue.wav differ diff --git a/assets/voices/fr-right-hand-on-green.wav b/assets/voices/fr-right-hand-on-green.wav new file mode 100644 index 0000000000000000000000000000000000000000..735f9c2c7a3688bfb5d48a34f2c968400f0c5665 Binary files /dev/null and b/assets/voices/fr-right-hand-on-green.wav differ diff --git a/assets/voices/fr-right-hand-on-red.wav b/assets/voices/fr-right-hand-on-red.wav new file mode 100644 index 0000000000000000000000000000000000000000..c3fa9c7fd0480459001ebb320525f0e294a21f6a Binary files /dev/null and b/assets/voices/fr-right-hand-on-red.wav differ diff --git a/assets/voices/fr-right-hand-on-yellow.wav b/assets/voices/fr-right-hand-on-yellow.wav new file mode 100644 index 0000000000000000000000000000000000000000..8ead1969d4c2b92a3a61fda4d31d4bf60a848902 Binary files /dev/null and b/assets/voices/fr-right-hand-on-yellow.wav differ diff --git a/fastlane/metadata/android/en-US/changelogs/13.txt b/fastlane/metadata/android/en-US/changelogs/13.txt new file mode 100644 index 0000000000000000000000000000000000000000..efe83daccccea002cf176f79cf8176c5fa1528a6 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/13.txt @@ -0,0 +1 @@ +Add audio description for member/color association. diff --git a/fastlane/metadata/android/fr-FR/changelogs/13.txt b/fastlane/metadata/android/fr-FR/changelogs/13.txt new file mode 100644 index 0000000000000000000000000000000000000000..3e6613489951612d47fd57742f6f0977590b8628 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/13.txt @@ -0,0 +1 @@ +Ajout de la description audio de la combinaison membre/couleur. diff --git a/lib/models/move.dart b/lib/models/move.dart index b415b2bdfb04738bba994bb87cd11b0d02733ccd..24b4fcb06477c9633e0c361b40b4cd9dc5a4016f 100644 --- a/lib/models/move.dart +++ b/lib/models/move.dart @@ -1,3 +1,4 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:twister/models/twister_color.dart'; import 'package:twister/models/twister_member.dart'; @@ -28,6 +29,14 @@ class Move { return 'Move(' + this.toJson().toString() + ')'; } + String toSoundAsset() { + String base = 'voices/' + tr('lang_prefix') + '-'; + String member = this.member.toString(); + String color = this.color.toString(); + + return base + member + '-on-' + color + '.wav'; + } + Map<String, dynamic>? toJson() { return <String, dynamic>{ 'color': this.color.toString(), diff --git a/lib/models/twister_color.dart b/lib/models/twister_color.dart index eb8c21b75948a70a05674f591874800fc35d3b9d..9a52dc37e17972f19ce3570cead754185826dec8 100644 --- a/lib/models/twister_color.dart +++ b/lib/models/twister_color.dart @@ -20,6 +20,7 @@ class TwisterColor { } String toString() { - return this.value.toString(); + List<String> parts = this.value.toString().split('.'); + return parts[1]; } } diff --git a/lib/models/twister_member.dart b/lib/models/twister_member.dart index 875f7d54f46d86d721a6d0adfd72891e48f92055..c9d74bf4ed15646f21478f9dcb362844c1d00805 100644 --- a/lib/models/twister_member.dart +++ b/lib/models/twister_member.dart @@ -20,6 +20,8 @@ class TwisterMember { } String toString() { - return this.value.toString(); + List<String> parts = this.value.toString().split('.'); + final exp = RegExp('(?<=[a-z])[A-Z]'); + return parts[1].replaceAllMapped(exp, (m) => '-${m.group(0)}').toLowerCase(); } } diff --git a/lib/ui/widgets/game.dart b/lib/ui/widgets/game.dart index 1d4a181bcac3e6869b190fa06eaf37ef4c54a9ce..a88bae4728e2e7c228cc2be262cd81bdf9768fec 100644 --- a/lib/ui/widgets/game.dart +++ b/lib/ui/widgets/game.dart @@ -1,3 +1,4 @@ +import 'package:audioplayers/audioplayers.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:unicons/unicons.dart'; @@ -14,15 +15,19 @@ class Game extends StatefulWidget { } class _GameState extends State<Game> { - Move move = Move.createNull(); + final player = AudioPlayer(); Widget pickNewMove() { return BlocBuilder<GameCubit, GameState>(builder: (BuildContext context, GameState state) { return TextButton( onPressed: () { + Move newMove = Move.pickRandom(); + BlocProvider.of<GameCubit>(context).setValues( - move: Move.pickRandom(), + move: newMove, ); + + player.play(AssetSource(newMove.toSoundAsset())); }, child: Icon(UniconsSolid.refresh), ); diff --git a/pubspec.lock b/pubspec.lock index d54095c61378821fb5ed1ba0ae8819e1fd7e7c12..6383746d9eff9310ca237517d42a4115507cb128 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,6 +9,70 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.2" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + audioplayers: + dependency: "direct main" + description: + name: audioplayers + sha256: c05c6147124cd63e725e861335a8b4d57300b80e6e92cea7c145c739223bbaef + url: "https://pub.dev" + source: hosted + version: "5.2.1" + audioplayers_android: + dependency: transitive + description: + name: audioplayers_android + sha256: b00e1a0e11365d88576320ec2d8c192bc21f1afb6c0e5995d1c57ae63156acb5 + url: "https://pub.dev" + source: hosted + version: "4.0.3" + audioplayers_darwin: + dependency: transitive + description: + name: audioplayers_darwin + sha256: "3034e99a6df8d101da0f5082dcca0a2a99db62ab1d4ddb3277bed3f6f81afe08" + url: "https://pub.dev" + source: hosted + version: "5.0.2" + audioplayers_linux: + dependency: transitive + description: + name: audioplayers_linux + sha256: "60787e73fefc4d2e0b9c02c69885402177e818e4e27ef087074cf27c02246c9e" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + audioplayers_platform_interface: + dependency: transitive + description: + name: audioplayers_platform_interface + sha256: "365c547f1bb9e77d94dd1687903a668d8f7ac3409e48e6e6a3668a1ac2982adb" + url: "https://pub.dev" + source: hosted + version: "6.1.0" + audioplayers_web: + dependency: transitive + description: + name: audioplayers_web + sha256: "22cd0173e54d92bd9b2c80b1204eb1eb159ece87475ab58c9788a70ec43c2a62" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + audioplayers_windows: + dependency: transitive + description: + name: audioplayers_windows + sha256: "9536812c9103563644ada2ef45ae523806b0745f7a78e89d1b5fb1951de90e1a" + url: "https://pub.dev" + source: hosted + version: "3.1.0" bloc: dependency: transitive description: @@ -120,6 +184,22 @@ packages: url: "https://pub.dev" source: hosted version: "2.2.3" + http: + dependency: transitive + description: + name: http + sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139 + url: "https://pub.dev" + source: hosted + version: "1.1.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" hydrated_bloc: dependency: "direct main" description: @@ -136,6 +216,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.18.1" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" material_color_utilities: dependency: transitive description: @@ -301,6 +389,30 @@ packages: description: flutter source: sdk version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" synchronized: dependency: transitive description: @@ -309,6 +421,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0+1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" typed_data: dependency: transitive description: @@ -325,6 +445,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + uuid: + dependency: transitive + description: + name: uuid + sha256: "22c94e5ad1e75f9934b766b53c742572ee2677c56bc871d850a57dad0f82127f" + url: "https://pub.dev" + source: hosted + version: "4.2.2" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 1a0109022d6dbcf267795175a8494ac2f1aadce8..360af894b750f87461cc8ed84086ca4460371f86 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: twister game companion publish_to: 'none' -version: 0.0.12+12 +version: 0.0.13+13 environment: sdk: '^3.0.0' @@ -12,6 +12,7 @@ dependencies: flutter: sdk: flutter + audioplayers: ^5.2.1 easy_localization: ^3.0.1 equatable: ^2.0.5 flutter_bloc: ^8.1.1 @@ -23,6 +24,7 @@ flutter: uses-material-design: false assets: - assets/translations/ + - assets/voices/ fonts: - family: Nunito diff --git a/tts/generate_sounds.sh b/tts/generate_sounds.sh new file mode 100755 index 0000000000000000000000000000000000000000..660e16f0120363d85d126f85c4a751010b843b7a --- /dev/null +++ b/tts/generate_sounds.sh @@ -0,0 +1,63 @@ +#! /bin/bash + +# Check dependencies +command -v pico2wave >/dev/null 2>&1 || { echo >&2 "I require pico2wave (libttspico-utils) but it's not installed. Aborting."; exit 1; } + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +BASE_DIR="$(dirname "${CURRENT_DIR}")" + +OUTPUT_BASE_FOLDER="${BASE_DIR}/assets/voices" +mkdir -p "${OUTPUT_BASE_FOLDER}" + +function generate_sound_file() { + LANG="$1" + FILE="$2" + TEXT="$3" + + LANG_CODE="$(echo "${LANG}" | cut -d"-" -f1)" + OUTPUT_FILE="${OUTPUT_BASE_FOLDER}/${LANG_CODE}-${FILE}.wav" + + echo "(${LANG_CODE}) \"${TEXT}\" -> ${OUTPUT_FILE}" + pico2wave -l "${LANG}" -w "${OUTPUT_FILE}" "${TEXT}" +} + +generate_sound_file "fr-FR" "left-hand-on-blue" "main gauche sur le bleu" +generate_sound_file "fr-FR" "right-hand-on-blue" "main droite sur le bleu" +generate_sound_file "fr-FR" "left-foot-on-blue" "pied gauche sur le bleu" +generate_sound_file "fr-FR" "right-foot-on-blue" "pied droit sur le bleu" + +generate_sound_file "fr-FR" "left-hand-on-green" "main gauche sur le vert" +generate_sound_file "fr-FR" "right-hand-on-green" "main droite sur le vert" +generate_sound_file "fr-FR" "left-foot-on-green" "pied gauche sur le vert" +generate_sound_file "fr-FR" "right-foot-on-green" "pied droit sur le vert" + +generate_sound_file "fr-FR" "left-hand-on-red" "main gauche sur le rouge" +generate_sound_file "fr-FR" "right-hand-on-red" "main droite sur le rouge" +generate_sound_file "fr-FR" "left-foot-on-red" "pied gauche sur le rouge" +generate_sound_file "fr-FR" "right-foot-on-red" "pied droit sur le rouge" + +generate_sound_file "fr-FR" "left-hand-on-yellow" "main gauche sur le jaune" +generate_sound_file "fr-FR" "right-hand-on-yellow" "main droite sur le jaune" +generate_sound_file "fr-FR" "left-foot-on-yellow" "pied gauche sur le jaune" +generate_sound_file "fr-FR" "right-foot-on-yellow" "pied droit sur le jaune" + +generate_sound_file "en-GB" "left-hand-on-blue" "left hand on blue" +generate_sound_file "en-GB" "right-hand-on-blue" "right hand on blue" +generate_sound_file "en-GB" "left-foot-on-blue" "left foot on blue" +generate_sound_file "en-GB" "right-foot-on-blue" "right foot on blue" + +generate_sound_file "en-GB" "left-hand-on-green" "left hand on green" +generate_sound_file "en-GB" "right-hand-on-green" "right hand on green" +generate_sound_file "en-GB" "left-foot-on-green" "left foot on green" +generate_sound_file "en-GB" "right-foot-on-green" "right foot on green" + +generate_sound_file "en-GB" "left-hand-on-red" "left hand on red" +generate_sound_file "en-GB" "right-hand-on-red" "right hand on red" +generate_sound_file "en-GB" "left-foot-on-red" "left foot on red" +generate_sound_file "en-GB" "right-foot-on-red" "right foot on red" + +generate_sound_file "en-GB" "left-hand-on-yellow" "left hand on yellow" +generate_sound_file "en-GB" "right-hand-on-yellow" "right hand on yellow" +generate_sound_file "en-GB" "left-foot-on-yellow" "left foot on yellow" +generate_sound_file "en-GB" "right-foot-on-yellow" "right foot on yellow" +