Skip to main content

GetVS16Width

Short summary

This functions checks if a codepoint can be combined with a variation selector 16 (VS16, U+FE0F). The VS16 makes a couple of characters displayed as emojis. Example: The codepoint U+0031 is: 1 The codepoints U+0031 U+FE0F is: 1️

Attention: The actual width a character needs for displaying is always dependent on the used font, the fontsize and the rendering! The width this function returns is actually an estimation.

  • Return type: DINT

Parameters

NameTypeCommentKind
codepointPOINTER TO UnicodeCodePointcodepoint to processinput
additionalWidthDINTwidth that is added with VS16output

Code

Declaration

FUNCTION INTERNAL GetVS16Width :DINT;
VAR_INPUT
(* codepoint to process *)
codepoint: POINTER TO UnicodeCodePoint;
END_VAR
VAR_OUTPUT
(* width that is added with VS16 *)
additionalWidth :DINT;
END_VAR

Implementation

CASE codepoint^ OF
16#0023: //NUMBER SIGN
additionalWidth := 1;
16#002A: //ASTERISK
additionalWidth := 1;
16#0030..16#0039: //DIGIT ZERO .. DIGIT NINE
additionalWidth := 1;
16#00A9: //COPYRIGHT SIGN
additionalWidth := 1;
16#00AE: //REGISTERED SIGN
additionalWidth := 1;
16#203C: //DOUBLE EXCLAMATION MARK
additionalWidth := 1;
16#2049: //EXCLAMATION QUESTION MARK
additionalWidth := 1;
16#2122: //TRADE MARK SIGN
additionalWidth := 1;
16#2139: //INFORMATION SOURCE
additionalWidth := 1;
16#2194..16#2199: //LEFT RIGHT ARROW .. SOUTH WEST ARROW
additionalWidth := 1;
16#21A9..16#21AA: //LEFTWARDS ARROW WITH HOOK .. RIGHTWARDS ARROW WITH HOOK
additionalWidth := 1;
16#231A..16#231B: //WATCH .. HOURGLASS
additionalWidth := 1;
16#2328: //KEYBOARD
additionalWidth := 1;
16#23CF: //EJECT SYMBOL
additionalWidth := 1;
16#23E9..16#23F3: //BLACK RIGHT-POINTING DOUBLE TRIANGLE .. HOURGLASS WITH FLOWING SAND
additionalWidth := 1;
16#23F8..16#23FA: //DOUBLE VERTICAL BAR .. BLACK CIRCLE FOR RECORD
additionalWidth := 1;
16#24C2: //CIRCLED LATIN CAPITAL LETTER M
additionalWidth := 1;
16#25AA..16#25AB: //BLACK SMALL SQUARE .. WHITE SMALL SQUARE
additionalWidth := 1;
16#25B6: //BLACK RIGHT-POINTING TRIANGLE
additionalWidth := 1;
16#25C0: //BLACK LEFT-POINTING TRIANGLE
additionalWidth := 1;
16#25FB..16#25FE: //WHITE MEDIUM SQUARE .. BLACK MEDIUM SMALL SQUARE
additionalWidth := 1;
16#2600..16#2604: //BLACK SUN WITH RAYS .. COMET
additionalWidth := 1;
16#260E: //BLACK TELEPHONE
additionalWidth := 1;
16#2611: //BALLOT BOX WITH CHECK
additionalWidth := 1;
16#2614..16#2615: //UMBRELLA WITH RAIN DROPS .. HOT BEVERAGE
additionalWidth := 1;
16#2618: //SHAMROCK
additionalWidth := 1;
16#261D: //WHITE UP POINTING INDEX
additionalWidth := 1;
16#2620: //SKULL AND CROSSBONES
additionalWidth := 1;
16#2622..16#2623: //RADIOACTIVE SIGN .. BIOHAZARD SIGN
additionalWidth := 1;
16#2626: //ORTHODOX CROSS
additionalWidth := 1;
16#262A: //STAR AND CRESCENT
additionalWidth := 1;
16#262E..16#262F: //PEACE SYMBOL .. YIN YANG
additionalWidth := 1;
16#2638..16#263A: //WHEEL OF DHARMA .. WHITE SMILING FACE
additionalWidth := 1;
16#2640: //FEMALE SIGN
additionalWidth := 1;
16#2642: //MALE SIGN
additionalWidth := 1;
16#2648..16#2653: //ARIES .. PISCES
additionalWidth := 1;
16#265F..16#2660: //BLACK CHESS PAWN .. BLACK SPADE SUIT
additionalWidth := 1;
16#2663: //BLACK CLUB SUIT
additionalWidth := 1;
16#2665..16#2666: //BLACK HEART SUIT .. BLACK DIAMOND SUIT
additionalWidth := 1;
16#2668: //HOT SPRINGS
additionalWidth := 1;
16#267B: //BLACK UNIVERSAL RECYCLING SYMBOL
additionalWidth := 1;
16#267E..16#267F: //PERMANENT PAPER SIGN .. WHEELCHAIR SYMBOL
additionalWidth := 1;
16#2692..16#2697: //HAMMER AND PICK .. ALEMBIC
additionalWidth := 1;
16#2699: //GEAR
additionalWidth := 1;
16#269B..16#269C: //ATOM SYMBOL .. FLEUR-DE-LIS
additionalWidth := 1;
16#26A0..16#26A1: //WARNING SIGN .. HIGH VOLTAGE SIGN
additionalWidth := 1;
16#26A7: //MALE WITH STROKE AND MALE AND FEMALE SIGN
additionalWidth := 1;
16#26AA..16#26AB: //MEDIUM WHITE CIRCLE .. MEDIUM BLACK CIRCLE
additionalWidth := 1;
16#26B0..16#26B1: //COFFIN .. FUNERAL URN
additionalWidth := 1;
16#26BD..16#26BE: //SOCCER BALL .. BASEBALL
additionalWidth := 1;
16#26C4..16#26C5: //SNOWMAN WITHOUT SNOW .. SUN BEHIND CLOUD
additionalWidth := 1;
16#26C8: //THUNDER CLOUD AND RAIN
additionalWidth := 1;
16#26CE..16#26CF: //OPHIUCHUS .. PICK
additionalWidth := 1;
16#26D1: //HELMET WITH WHITE CROSS
additionalWidth := 1;
16#26D3..16#26D4: //CHAINS .. NO ENTRY
additionalWidth := 1;
16#26E9..16#26EA: //SHINTO SHRINE .. CHURCH
additionalWidth := 1;
16#26F0..16#26F5: //MOUNTAIN .. SAILBOAT
additionalWidth := 1;
16#26F7..16#26FA: //SKIER .. TENT
additionalWidth := 1;
16#26FD: //FUEL PUMP
additionalWidth := 1;
16#2702: //BLACK SCISSORS
additionalWidth := 1;
16#2705: //WHITE HEAVY CHECK MARK
additionalWidth := 1;
16#2708..16#270D: //AIRPLANE .. WRITING HAND
additionalWidth := 1;
16#270F: //PENCIL
additionalWidth := 1;
16#2712: //BLACK NIB
additionalWidth := 1;
16#2714: //HEAVY CHECK MARK
additionalWidth := 1;
16#2716: //HEAVY MULTIPLICATION X
additionalWidth := 1;
16#271D: //LATIN CROSS
additionalWidth := 1;
16#2721: //STAR OF DAVID
additionalWidth := 1;
16#2728: //SPARKLES
additionalWidth := 1;
16#2733..16#2734: //EIGHT SPOKED ASTERISK .. EIGHT POINTED BLACK STAR
additionalWidth := 1;
16#2744: //SNOWFLAKE
additionalWidth := 1;
16#2747: //SPARKLE
additionalWidth := 1;
16#274C: //CROSS MARK
additionalWidth := 1;
16#274E: //NEGATIVE SQUARED CROSS MARK
additionalWidth := 1;
16#2753..16#2755: //BLACK QUESTION MARK ORNAMENT .. WHITE EXCLAMATION MARK ORNAMENT
additionalWidth := 1;
16#2757: //HEAVY EXCLAMATION MARK SYMBOL
additionalWidth := 1;
16#2763..16#2764: //HEAVY HEART EXCLAMATION MARK ORNAMENT .. HEAVY BLACK HEART
additionalWidth := 1;
16#2795..16#2797: //HEAVY PLUS SIGN .. HEAVY DIVISION SIGN
additionalWidth := 1;
16#27A1: //BLACK RIGHTWARDS ARROW
additionalWidth := 1;
16#27B0: //CURLY LOOP
additionalWidth := 1;
16#27BF: //DOUBLE CURLY LOOP
additionalWidth := 1;
16#2934..16#2935: //ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS .. ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
additionalWidth := 1;
16#2B05..16#2B07: //LEFTWARDS BLACK ARROW .. DOWNWARDS BLACK ARROW
additionalWidth := 1;
16#2B1B..16#2B1C: //BLACK LARGE SQUARE .. WHITE LARGE SQUARE
additionalWidth := 1;
16#2B50: //WHITE MEDIUM STAR
additionalWidth := 1;
16#2B55: //HEAVY LARGE CIRCLE
additionalWidth := 1;
16#3030: //WAVY DASH
additionalWidth := 1;
16#303D: //PART ALTERNATION MARK
additionalWidth := 1;
16#3297: //CIRCLED IDEOGRAPH CONGRATULATION
additionalWidth := 1;
16#3299: //CIRCLED IDEOGRAPH SECRET
additionalWidth := 1;
16#1F004: //MAHJONG TILE RED DRAGON
additionalWidth := 1;
16#1F170..16#1F171: //NEGATIVE SQUARED LATIN CAPITAL LETTER A .. NEGATIVE SQUARED LATIN CAPITAL LETTER B
additionalWidth := 1;
16#1F17E..16#1F17F: //NEGATIVE SQUARED LATIN CAPITAL LETTER O .. NEGATIVE SQUARED LATIN CAPITAL LETTER P
additionalWidth := 1;
16#1F202: //SQUARED KATAKANA SA
additionalWidth := 1;
16#1F21A: //SQUARED CJK UNIFIED IDEOGRAPH-7121
additionalWidth := 1;
16#1F22F: //SQUARED CJK UNIFIED IDEOGRAPH-6307
additionalWidth := 1;
16#1F237: //SQUARED CJK UNIFIED IDEOGRAPH-6708
additionalWidth := 1;
16#1F30D..16#1F30F: //EARTH GLOBE EUROPE-AFRICA .. EARTH GLOBE ASIA-AUSTRALIA
additionalWidth := 1;
16#1F315: //FULL MOON SYMBOL
additionalWidth := 1;
16#1F31C: //LAST QUARTER MOON WITH FACE
additionalWidth := 1;
16#1F321: //THERMOMETER
additionalWidth := 1;
16#1F324..16#1F32C: //WHITE SUN WITH SMALL CLOUD .. WIND BLOWING FACE
additionalWidth := 1;
16#1F336: //HOT PEPPER
additionalWidth := 1;
16#1F378: //COCKTAIL GLASS
additionalWidth := 1;
16#1F37D: //FORK AND KNIFE WITH PLATE
additionalWidth := 1;
16#1F393: //GRADUATION CAP
additionalWidth := 1;
16#1F396..16#1F397: //MILITARY MEDAL .. REMINDER RIBBON
additionalWidth := 1;
16#1F399..16#1F39B: //STUDIO MICROPHONE .. CONTROL KNOBS
additionalWidth := 1;
16#1F39E..16#1F39F: //FILM FRAMES .. ADMISSION TICKETS
additionalWidth := 1;
16#1F3A7: //HEADPHONE
additionalWidth := 1;
16#1F3AC..16#1F3AE: //CLAPPER BOARD .. VIDEO GAME
additionalWidth := 1;
16#1F3C2: //SNOWBOARDER
additionalWidth := 1;
16#1F3C4: //SURFER
additionalWidth := 1;
16#1F3C6: //TROPHY
additionalWidth := 1;
16#1F3CA..16#1F3CE: //SWIMMER .. RACING CAR
additionalWidth := 1;
16#1F3D4..16#1F3E0: //SNOW CAPPED MOUNTAIN .. HOUSE BUILDING
additionalWidth := 1;
16#1F3ED: //FACTORY
additionalWidth := 1;
16#1F3F3: //WAVING WHITE FLAG
additionalWidth := 1;
16#1F3F5: //ROSETTE
additionalWidth := 1;
16#1F3F7: //LABEL
additionalWidth := 1;
16#1F408: //CAT
additionalWidth := 1;
16#1F415: //DOG
additionalWidth := 1;
16#1F41F: //FISH
additionalWidth := 1;
16#1F426: //BIRD
additionalWidth := 1;
16#1F43F: //CHIPMUNK
additionalWidth := 1;
16#1F441..16#1F442: //EYE .. EAR
additionalWidth := 1;
16#1F446..16#1F449: //WHITE UP POINTING BACKHAND INDEX .. WHITE RIGHT POINTING BACKHAND INDEX
additionalWidth := 1;
16#1F44D..16#1F44E: //THUMBS UP SIGN .. THUMBS DOWN SIGN
additionalWidth := 1;
16#1F453: //EYEGLASSES
additionalWidth := 1;
16#1F46A: //FAMILY
additionalWidth := 1;
16#1F47D: //EXTRATERRESTRIAL ALIEN
additionalWidth := 1;
16#1F4A3: //BOMB
additionalWidth := 1;
16#1F4B0: //MONEY BAG
additionalWidth := 1;
16#1F4B3: //CREDIT CARD
additionalWidth := 1;
16#1F4BB: //PERSONAL COMPUTER
additionalWidth := 1;
16#1F4BF: //OPTICAL DISC
additionalWidth := 1;
16#1F4CB: //CLIPBOARD
additionalWidth := 1;
16#1F4DA: //BOOKS
additionalWidth := 1;
16#1F4DF: //PAGER
additionalWidth := 1;
16#1F4E4..16#1F4E6: //OUTBOX TRAY .. PACKAGE
additionalWidth := 1;
16#1F4EA..16#1F4ED: //CLOSED MAILBOX WITH LOWERED FLAG .. OPEN MAILBOX WITH LOWERED FLAG
additionalWidth := 1;
16#1F4F7: //CAMERA
additionalWidth := 1;
16#1F4F9..16#1F4FB: //VIDEO CAMERA .. RADIO
additionalWidth := 1;
16#1F4FD: //FILM PROJECTOR
additionalWidth := 1;
16#1F508: //SPEAKER
additionalWidth := 1;
16#1F50D: //LEFT-POINTING MAGNIFYING GLASS
additionalWidth := 1;
16#1F512..16#1F513: //LOCK .. OPEN LOCK
additionalWidth := 1;
16#1F549..16#1F54A: //OM SYMBOL .. DOVE OF PEACE
additionalWidth := 1;
16#1F550..16#1F567: //CLOCK FACE ONE OCLOCK .. CLOCK FACE TWELVE-THIRTY
additionalWidth := 1;
16#1F56F..16#1F570: //CANDLE .. MANTELPIECE CLOCK
additionalWidth := 1;
16#1F573..16#1F579: //HOLE .. JOYSTICK
additionalWidth := 1;
16#1F587: //LINKED PAPERCLIPS
additionalWidth := 1;
16#1F58A..16#1F58D: //LOWER LEFT BALLPOINT PEN .. LOWER LEFT CRAYON
additionalWidth := 1;
16#1F590: //RAISED HAND WITH FINGERS SPLAYED
additionalWidth := 1;
16#1F5A5: //DESKTOP COMPUTER
additionalWidth := 1;
16#1F5A8: //PRINTER
additionalWidth := 1;
16#1F5B1..16#1F5B2: //THREE BUTTON MOUSE .. TRACKBALL
additionalWidth := 1;
16#1F5BC: //FRAME WITH PICTURE
additionalWidth := 1;
16#1F5C2..16#1F5C4: //CARD INDEX DIVIDERS .. FILE CABINET
additionalWidth := 1;
16#1F5D1..16#1F5D3: //WASTEBASKET .. SPIRAL CALENDAR PAD
additionalWidth := 1;
16#1F5DC..16#1F5DE: //COMPRESSION .. ROLLED-UP NEWSPAPER
additionalWidth := 1;
16#1F5E1: //DAGGER KNIFE
additionalWidth := 1;
16#1F5E3: //SPEAKING HEAD IN SILHOUETTE
additionalWidth := 1;
16#1F5E8: //LEFT SPEECH BUBBLE
additionalWidth := 1;
16#1F5EF: //RIGHT ANGER BUBBLE
additionalWidth := 1;
16#1F5F3: //BALLOT BOX WITH BALLOT
additionalWidth := 1;
16#1F5FA: //WORLD MAP
additionalWidth := 1;
16#1F610: //NEUTRAL FACE
additionalWidth := 1;
16#1F687: //METRO
additionalWidth := 1;
16#1F68D: //ONCOMING BUS
additionalWidth := 1;
16#1F691: //AMBULANCE
additionalWidth := 1;
16#1F694: //ONCOMING POLICE CAR
additionalWidth := 1;
16#1F698: //ONCOMING AUTOMOBILE
additionalWidth := 1;
16#1F6AD: //NO SMOKING SYMBOL
additionalWidth := 1;
16#1F6B2: //BICYCLE
additionalWidth := 1;
16#1F6B9..16#1F6BA: //MENS SYMBOL .. WOMENS SYMBOL
additionalWidth := 1;
16#1F6BC: //BABY SYMBOL
additionalWidth := 1;
16#1F6CB: //COUCH AND LAMP
additionalWidth := 1;
16#1F6CD..16#1F6CF: //SHOPPING BAGS .. BED
additionalWidth := 1;
16#1F6E0..16#1F6E5: //HAMMER AND WRENCH .. MOTOR BOAT
additionalWidth := 1;
16#1F6E9: //SMALL AIRPLANE
additionalWidth := 1;
16#1F6F0: //SATELLITE
additionalWidth := 1;
16#1F6F3: //PASSENGER SHIP
additionalWidth := 1;
ELSE
additionalWidth := 0;
END_CASE

GetVS16Width := additionalWidth;