# Hand-curated symbol choices, one entry per concept per set. # # Keys are normalised concepts (see normalize_concept in build.py). # symbol = the set's own id: Mulberry file name (without .svg), OpenMoji # hexcode, Bliss BCI-AV id # none = true leaves the concept unmapped in that set (the runtime falls # back to the next set) -- used where the automatic match is wrong # reason = why; required # # Where a label means different things on different boards, the sense used # on the default boards wins, because that is the picture people see first. # Every choice here was checked against the rendered contact sheets. # # Cell concepts: message-bar action cells are keyed by their action # ("action:speakall", "action:clear") and a navigation cell whose label is a # homograph by its navigation sense ("nav:back"), so the Back key never shows # the body part. See cell_concept() in build.py and # aac_core::symbols::lookup_for_cell. # # Locale-sensitive (to revisit when per-locale overrides exist; the app ships # in 45 languages): # - "come": Mulberry's palm-up beckoning finger is rude in the Philippines # and parts of East Asia; a palm-down beckoning hand is the usual variant. # - "good"/"bad": thumbs up/down (Mulberry and OpenMoji) is rude in parts of # West Africa and the Middle East. # - "nav:back": the left arrow should be mirrored in right-to-left scripts # (Arabic, Hebrew, Persian, Urdu), where "back" points right. # - The OK-hand gesture is never used: it is obscene or insulting in several # regions and a flagged hate sign in some contexts. [mulberry] # ── Wrong automatic matches ── "orange" = { none = true, reason = "vocabulary word is the colour; the only Mulberry 'orange' is the fruit and the set has no orange paint swatch" } # ── People whose gender or age the word does not name (SPEC §4.3) ── # Where Unicode has a gender-neutral person for the word (built on 🧑 # "person") or a neutral object, OpenMoji's is used instead of a gendered or # child figure. Unicode's person may still be drawn with one hairstyle; it is # the neutral design the international standard defines. "doctor" = { none = true, reason = "drawn as a man (doctor_1a); OpenMoji's health worker is Unicode's gender-neutral person" } "teacher" = { none = true, reason = "drawn as a man in a suit and tie (teacher_1a); OpenMoji's teacher is Unicode's gender-neutral person" } "police" = { none = true, reason = "drawn as a man in a British custodian helmet (police_1a); OpenMoji's police officer is gender-neutral in Unicode and wears a cap worn worldwide" } "eat" = { none = true, reason = "drawn as a boy eating (eat_,_to): a child for a word about no one's age; OpenMoji's plate with fork and knife is neutral" } "drink" = { none = true, reason = "drawn as a boy drinking (drink_,_to): a child for a word about no one's age; OpenMoji's cup with straw is neutral" } "brush" = { none = true, reason = "drawn as a boy brushing his teeth (brush_teeth_,_to); OpenMoji's toothbrush is neutral" } "taste" = { none = true, reason = "drawn as a child tasting (taste_,_to); OpenMoji's tongue is neutral" } "park" = { none = true, reason = "the only match is 'park_,_to' (parking a car); the board word is the place" } "pants" = { symbol = "trousers", reason = "US 'pants' = trousers; Mulberry's 'pants' is British underpants" } "right" = { symbol = "correct", reason = "vocabulary 'right' is the opposite of 'wrong' (correct), not the direction arrow" } "break" = { symbol = "break_time_1", reason = "board cell speaks 'I need a break' (a rest), not breaking glass" } "dress" = { symbol = "get_dressed_,_to", reason = "vocabulary 'dress' is the verb; the automatic match was the garment" } "sweet" = { symbol = "sweet_2", reason = "taste adjective beside sour/salty/spicy, drawn in the same taster style; 'sweet' is a candy" } "old" = { symbol = "old_object", reason = "board pairs 'old' with 'new' for things; old_object shows age without implying a person" } # ── People and family ── "mom" = { symbol = "mum_parent", reason = "set's parent symbol with the mother highlighted" } "dad" = { symbol = "dad_parent", reason = "set's parent symbol with the father highlighted" } "grandma" = { symbol = "grandmother", reason = "family-tree symbol with the grandmother highlighted" } "grandpa" = { symbol = "grandfather", reason = "family-tree symbol with the grandfather highlighted" } "aunt" = { symbol = "aunt_maternal", reason = "set only draws aunts by side of family; the relation highlight reads as 'aunt'" } "uncle" = { symbol = "uncle_maternal", reason = "set only draws uncles by side of family; the relation highlight reads as 'uncle'" } "therapist" = { symbol = "speech_language_therapist_1a", reason = "the therapist most AAC users see; person with a speech bubble" } # ── Feelings ── # The set draws each feeling as a man's face (angry_man, sad_man...). A word # that names no gender or age gets a neutral picture (SPEC §4.3), so where # OpenMoji has the feeling, its emoji face -- no gender, age or skin, as in # Unicode -- is used instead, and the feelings stay one face style. "happy" = { none = true, reason = "drawn as a man's face (happy_man); OpenMoji's grinning face is neutral" } "sad" = { none = true, reason = "drawn as a man's face (sad_man); OpenMoji's frowning face is neutral" } "angry" = { none = true, reason = "drawn as a man's face (angry_man); OpenMoji's angry face is neutral" } "scared" = { none = true, reason = "drawn as a man's face (afraid_man); OpenMoji's fearful face is neutral" } "confused" = { none = true, reason = "drawn as a man's face (confused_man); OpenMoji's confused face is neutral" } "excited" = { none = true, reason = "drawn as a man's face (excited_man); OpenMoji's star-struck face is neutral" } "worried" = { none = true, reason = "drawn as a man's face (worried_man); OpenMoji's worried face is neutral" } "surprised" = { none = true, reason = "drawn as a man's face (surprised_man); OpenMoji's open-mouthed face is neutral" } "jealous" = { symbol = "jealous_man", reason = "set's 'jealous' face; no set has a neutral one (a man's face, drawn in the chosen skin tone)" } "funny" = { none = true, reason = "drawn as a man's laughing face (funny_laugh); OpenMoji's face with tears of joy is neutral" } "tired" = { none = true, reason = "drawn as a man yawning (yawn_,_to); OpenMoji's yawning face is neutral" } "think" = { none = true, reason = "drawn as a man's face (think_,_to); OpenMoji's thinking face is neutral" } "hot" = { none = true, reason = "drawn as a man's face (hot_person); OpenMoji's hot face is neutral" } "quiet" = { none = true, reason = "drawn as a man (quiet); OpenMoji's shushing face is neutral" } "itchy" = { symbol = "itch", reason = "person scratching an itch" } "delicious" = { none = true, reason = "drawn as a boy tasting (delicious_food): a child for a word about no one's age; OpenMoji's face savouring food is neutral" } "slow" = { symbol = "snail", reason = "snail is the conventional AAC picture for slow; pairs with the set's running 'fast'" } "big" = { symbol = "large", reason = "set's size symbol, drawn in the same style as the automatic 'little'" } "clean" = { symbol = "clean_room", reason = "sparkling room shows the adjective (board 'Describing'), not a cleaning action" } # ── Social words ── "hi" = { none = true, reason = "drawn as a man waving (hello); OpenMoji's waving hand takes the chosen skin tone and no gender" } "yes" = { symbol = "correct", reason = "tick mark; pairs with the set's cross for 'no'" } "no" = { symbol = "mistake_no_wrong", reason = "the set's own 'no/wrong' cross" } "wrong" = { symbol = "mistake_no_wrong", reason = "the set's own 'no/wrong' cross" } "all done" = { symbol = "finish", reason = "the set's 'finish' symbol" } "done" = { symbol = "finish", reason = "the set's 'finish' symbol" } # ── Places ── "home" = { symbol = "house", reason = "house is the set's picture for home" } "bathroom" = { symbol = "toilet", reason = "board speaks 'I need the bathroom' (US: the toilet)" } "store" = { symbol = "shop", reason = "US 'store' = the set's 'shop'" } "restaurant" = { symbol = "cafe", reason = "waiter serving a seated diner; the set has no separate restaurant" } "hospital" = { symbol = "surgery_health_centre", reason = "medical building with first-aid sign; the set has no separate hospital" } "playground" = { symbol = "slide", reason = "the set's playground category symbol; slide is the conventional playground picture" } "office" = { symbol = "office_block", reason = "office building" } "class" = { symbol = "class_room", reason = "classroom with pupils at desks" } "recess" = { symbol = "break_time_2", reason = "school break time (see-saw and clock) = US recess" } "next to" = { symbol = "beside_next_to", reason = "the set's beside/next-to position symbol, same style as its other prepositions" } "mountain" = { symbol = "mountains", reason = "plural drawing of the same thing" } # ── Things ── "bed" = { symbol = "single_bed", reason = "plain bed" } "toy" = { symbol = "toys", reason = "the set's toys symbol" } "phone" = { symbol = "mobile_phone", reason = "the phone people carry" } "tv" = { symbol = "flatscreen_tv", reason = "television" } "juice" = { symbol = "orange_juice", reason = "glass of juice with its fruit; the set has no generic juice" } "cookie" = { symbol = "biscuit_chocolate_chip", reason = "US cookie = chocolate-chip biscuit" } "emergency" = { symbol = "ambulance", reason = "board speaks 'This is an emergency'; ambulance is the conventional picture" } "hat" = { symbol = "hat_-_mans", reason = "plain brimmed hat" } "shoe" = { symbol = "shoe_-_mans", reason = "plain shoe" } "shoes" = { symbol = "shoe_-_mans", reason = "plain shoe" } "diaper" = { symbol = "nappy", reason = "US diaper = British nappy" } "color" = { symbol = "colour", reason = "US spelling of the set's 'colour'" } "time" = { symbol = "clock", reason = "clock" } "party" = { symbol = "party_celebration", reason = "cake, present and balloon" } "birthday" = { symbol = "birthday_cake", reason = "birthday cake with candles" } "verbs" = { symbol = "verbs_collective", reason = "the set's own collective symbol for verbs (navigation cell)" } "actions" = { symbol = "verbs_collective", reason = "the 'Actions' navigation cell opens the board of action words; same collective symbol as 'Verbs'" } "nav:back" = { symbol = "left", reason = "Back navigation cell: plain left arrow; the label 'back' alone is the body part (mirror in RTL scripts)" } # ── Actions ── "action:speakall" = { none = true, reason = "drawn as a boy talking (talk_1_,_to); OpenMoji's speaking head is a silhouette with no gender, age or skin" } "listen" = { symbol = "hear_,_to", reason = "hand cupped to ear, the conventional 'listen'" } "call" = { symbol = "telephone_2_,_to", reason = "person making a phone call" } "sleep" = { symbol = "sleep_male_,_to", reason = "person asleep" } "wash" = { symbol = "wash_hands_,_to", reason = "washing hands, the everyday 'wash'" } "climb" = { symbol = "climb_up_,_to", reason = "person climbing" } "start" = { symbol = "begin_start", reason = "the set's begin/start symbol" } "ride" = { symbol = "ride_car_,_to", reason = "riding in a car" } "show" = { symbol = "show_me_,_to", reason = "person showing another something" } [openmoji] # ── Wrong automatic matches (CLDR names that mean something else) ── "close" = { none = true, reason = "annotation 'close' is the UI close cross, not closing something" } "dizzy" = { symbol = "1F635-200D-1F4AB", reason = "CLDR 'dizzy' is a shooting star; face with spiral eyes is the feeling" } "hold" = { none = true, reason = "annotation 'hold' is a touch-and-hold UI gesture" } "move" = { none = true, reason = "annotation 'move' is a UI move icon" } "share" = { none = true, reason = "annotation 'share' is the UI share icon, not sharing with people" } "watch" = { none = true, reason = "vocabulary 'watch' is the verb; the emoji is a wristwatch" } "dress" = { none = true, reason = "vocabulary 'dress' is the verb; the emoji is the garment" } "chicken" = { symbol = "1F357", reason = "board 'chicken' is food: poultry leg, not the live bird" } # ── Neutral pictures for words that name no gender or age (SPEC §4.3) ── "eat" = { symbol = "1F37D", reason = "plate with fork and knife: eating, with no person to give an age or gender" } "brush" = { symbol = "1FAA5", reason = "toothbrush (the vocabulary 'brush' is brushing teeth)" } "taste" = { symbol = "1F445", reason = "tongue" } # ── Feelings ── "happy" = { symbol = "1F600", reason = "grinning face" } "excited" = { symbol = "1F929", reason = "star-struck face: excitement, distinct from the grinning 'happy'" } "funny" = { symbol = "1F602", reason = "face with tears of joy: laughing at something funny" } "think" = { symbol = "1F914", reason = "thinking face" } "delicious" = { symbol = "1F60B", reason = "face savouring food" } "sad" = { symbol = "2639", reason = "frowning face" } "angry" = { symbol = "1F620", reason = "angry face" } "scared" = { symbol = "1F628", reason = "fearful face" } "confused" = { symbol = "1F615", reason = "confused face" } "worried" = { symbol = "1F61F", reason = "worried face" } "surprised" = { symbol = "1F62E", reason = "face with open mouth" } "tired" = { symbol = "1F971", reason = "yawning face, like Mulberry's yawn; the 'tired face' looks almost the same as the persevering face used for pain on the same boards" } "sick" = { symbol = "1F912", reason = "face with thermometer" } "silly" = { symbol = "1F92A", reason = "zany face" } "nauseous" = { symbol = "1F922", reason = "nauseated face" } "hurting" = { symbol = "1F623", reason = "persevering face: pain without pointing at a body part (the head-bandage face reads as a head injury)" } "pain" = { symbol = "1F623", reason = "persevering face: on the medical board beside head/back/stomach the head-bandage face would say 'my head hurts'" } "cold" = { symbol = "1F976", reason = "cold face (board: 'I'm cold')" } "hot" = { symbol = "1F975", reason = "hot face (board: 'I'm hot')" } "quiet" = { symbol = "1F92B", reason = "shushing face" } "loud" = { symbol = "1F4E2", reason = "loudspeaker" } "good" = { symbol = "1F44D", reason = "thumbs up" } "bad" = { symbol = "1F44E", reason = "thumbs down" } "love" = { symbol = "2764", reason = "red heart" } "i love you" = { symbol = "2764", reason = "red heart, as for 'love'; the ASL love-you handshape is opaque to non-signers and looks like the insulting 'horns' at tile size" } # ── Social ── "hi" = { symbol = "1F44B", reason = "waving hand" } "bye" = { none = true, reason = "the only candidate is the waving hand already used for 'hi'; falls back to Bliss 'goodbye' so hi and bye differ" } "yes" = { symbol = "2705", reason = "check mark" } "no" = { symbol = "274C", reason = "cross mark" } "ok" = { symbol = "1F642", reason = "slightly smiling face (board: 'I'm OK'), in the face style of the other feelings; the OK hand is an insult or hate sign in many regions" } "okay" = { symbol = "1F642", reason = "slightly smiling face, as for 'ok'; never the OK hand" } "stop" = { symbol = "270B", reason = "raised hand, the conventional AAC 'stop'; the stop sign has the English word STOP baked in" } "i don't know" = { symbol = "1F937", reason = "person shrugging, the standard AAC picture for 'I don't know' (medical YES / NO / I DON'T KNOW row)" } "questions" = { symbol = "2753", reason = "question mark, as for 'question' (navigation cell to the question words)" } "nav:back" = { symbol = "2B05", reason = "Back navigation cell: left arrow (not the BACK-lettered arrow; mirror in RTL scripts)" } "question" = { symbol = "2753", reason = "question mark" } "action:speakall" = { symbol = "1F5E3", reason = "speaking head (Speak action cell)" } # ── People ── "grandma" = { symbol = "1F475", reason = "old woman" } "grandpa" = { symbol = "1F474", reason = "old man" } "doctor" = { symbol = "1F9D1-200D-2695-FE0F", reason = "health worker" } "friend" = { symbol = "1F9D1-200D-1F91D-200D-1F9D1", reason = "people holding hands" } "police" = { symbol = "1F46E", reason = "police officer" } "hug" = { symbol = "1FAC2", reason = "people hugging" } # ── Places ── "bathroom" = { symbol = "1F6BD", reason = "toilet (board: 'I need the bathroom')" } "home" = { symbol = "1F3E0", reason = "house" } "beach" = { symbol = "1F3D6", reason = "beach with umbrella" } "park" = { symbol = "1F3DE", reason = "national park landscape" } "playground" = { symbol = "1F6DD", reason = "playground slide" } "store" = { symbol = "1F3EA", reason = "convenience store" } "office" = { symbol = "1F3E2", reason = "office building" } "emergency" = { symbol = "1F6A8", reason = "emergency light" } "medical" = { symbol = "2695", reason = "medical symbol (navigation cell)" } # ── Food and drink ── "apple" = { symbol = "1F34E", reason = "red apple" } "cheese" = { symbol = "1F9C0", reason = "cheese wedge" } "rice" = { symbol = "1F35A", reason = "cooked rice" } "milk" = { symbol = "1F95B", reason = "glass of milk" } "juice" = { symbol = "1F9C3", reason = "juice box" } "water" = { symbol = "1F4A7", reason = "droplet" } "drink" = { symbol = "1F964", reason = "cup with straw" } "food" = { symbol = "1F37D", reason = "plate with fork and knife" } "medicine" = { symbol = "1F48A", reason = "pill" } "birthday" = { symbol = "1F382", reason = "birthday cake" } "party" = { symbol = "1F389", reason = "party popper" } # ── Things ── "ball" = { symbol = "26BD", reason = "ball (soccer ball)" } "book" = { symbol = "1F4D5", reason = "closed book" } "car" = { symbol = "1F697", reason = "automobile" } "computer" = { symbol = "1F4BB", reason = "laptop" } "game" = { symbol = "1F3B2", reason = "game die" } "movie" = { symbol = "1F3AC", reason = "clapper board" } "music" = { symbol = "1F3B5", reason = "musical note" } "phone" = { symbol = "1F4F1", reason = "mobile phone" } "toy" = { symbol = "1F9F8", reason = "teddy bear" } "tv" = { symbol = "1F4FA", reason = "television" } "paper" = { symbol = "1F4C4", reason = "sheet of paper" } "shirt" = { symbol = "1F455", reason = "t-shirt" } "pants" = { symbol = "1F456", reason = "jeans (US pants)" } "teeth" = { symbol = "1F9B7", reason = "tooth" } "wheelchair" = { symbol = "1F9BD", reason = "manual wheelchair" } "breathing" = { symbol = "1FAC1", reason = "lungs (board: 'I can't breathe well')" } # ── Actions and weather ── "walk" = { symbol = "1F6B6", reason = "person walking" } "run" = { symbol = "1F3C3", reason = "person running" } "swim" = { symbol = "1F3CA", reason = "person swimming" } "write" = { symbol = "270D", reason = "writing hand" } "sleep" = { symbol = "1F634", reason = "sleeping face" } "rain" = { symbol = "1F327", reason = "cloud with rain" } "snow" = { symbol = "2744", reason = "snowflake" } "tree" = { symbol = "1F333", reason = "deciduous tree" } [bliss] # ── Wrong automatic matches (a BCI-AV gloss with another sense) ── "fast" = { symbol = "16446", reason = "quick/fast; the automatic match was 'fast, go without food'" } "fit" = { none = true, reason = "only match is an epileptic fit; the vocabulary verb is 'to fit'" } "so" = { symbol = "17708", reason = "so (therefore), the vocabulary's and page sets' sense; the automatic match was 'then, so, later'" } "hot" = { symbol = "14900", reason = "hot (temperature); the automatic match was 'hot, spicy'" } "light" = { symbol = "25336", reason = "vocabulary 'light' pairs with 'heavy' (weight)" } "just" = { symbol = "12363", reason = "'just' as in only; the automatic match was 'just, fair'" } "sweet" = { symbol = "17478", reason = "sweet (taste) beside sour/salty/spicy; the automatic match was 'sweet, confection'" } "orange" = { symbol = "15931", reason = "the colour (BCI form, like the other colours); the automatic match was the fruit" } "right" = { symbol = "13416", reason = "vocabulary 'right' is the opposite of 'wrong' (correct)" } "wrong" = { symbol = "14935", reason = "incorrect/wrong, the opposite of 'right'" } "old" = { symbol = "15915", reason = "old (opposite of new), paired with 'new' on the Describing board" } "who" = { symbol = "18244", reason = "question 'who'; the automatic match was the relative pronoun" } "they" = { symbol = "17713", reason = "they (persons); the automatic match was the indefinite form" } "you" = { symbol = "18465", reason = "you (general); the automatic match was the plural form" } "your" = { symbol = "18473", reason = "your (singular); the set has no unmarked form" } "hold" = { symbol = "23532", reason = "hold (with hand); the automatic match was 'hold, contain'" } "for" = { symbol = "14382", reason = "for (purpose), the general 'for'; the automatic match was 'in exchange for'" } # ── Board senses ── "break" = { symbol = "16497", reason = "board cell speaks 'I need a break' (rest period), not 'to break'" } "recess" = { symbol = "16497", reason = "US recess = rest period at school" } "chicken" = { symbol = "13165", reason = "board 'chicken' is food, not the bird" } "dinner" = { symbol = "17468", reason = "US dinner = the evening meal (supper, dinner); the automatic match was 'lunch, dinner'" } "hurting" = { symbol = "14913", reason = "hurt, pain (feel), suffer: the feeling, not an injury" } "nav:back" = { symbol = "12613", reason = "Back navigation cell: backward, back (direction); plain 'back' is back (body)" } # ── Navigation cells naming a board ── "questions" = { symbol = "16445", reason = "question (navigation cell to the question words)" } "feelings" = { symbol = "14164", reason = "feeling, emotion (navigation cell to the feelings board)" } "places" = { symbol = "16193", reason = "place, area, location (navigation cell to the places board)" } # ── Missing automatic matches ── "hi" = { symbol = "14702", reason = "hello, greetings" } "bye" = { symbol = "14454", reason = "goodbye, farewell" } "phone" = { symbol = "17518", reason = "telephone" } "tv" = { symbol = "17519", reason = "television" } "shoes" = { symbol = "16959", reason = "shoe" }