From db1952994dfb1b3bbead169febdce236f077c148 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Wed, 7 Dec 2022 02:22:35 -0700 Subject: resolves #2373 correctly map all icons from FontAwesome 4 (PR #2374) --- CHANGELOG.adoc | 1 + data/fonts/fa-legacy-mapping.yml | 786 ++++++++++++++++++++++++ lib/asciidoctor/pdf/ext.rb | 1 + lib/asciidoctor/pdf/ext/prawn-icon.rb | 6 + lib/asciidoctor/pdf/ext/prawn-icon/interface.rb | 11 + lib/asciidoctor/pdf/ext/prawn-icon/legacy.rb | 11 + lib/asciidoctor/pdf/ext/prawn/extensions.rb | 14 +- spec/icon_spec.rb | 15 +- 8 files changed, 831 insertions(+), 14 deletions(-) create mode 100644 data/fonts/fa-legacy-mapping.yml create mode 100644 lib/asciidoctor/pdf/ext/prawn-icon.rb create mode 100644 lib/asciidoctor/pdf/ext/prawn-icon/interface.rb create mode 100644 lib/asciidoctor/pdf/ext/prawn-icon/legacy.rb diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index e52fc60d..2e5d68e0 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -37,6 +37,7 @@ Improvements:: Bug Fixes:: +* correctly map all icons from FontAwesome 4 (#2373) * resolve remote image in document title or section title with autogenerated ID * keep caret between items in menu macro with previous item if items wrap * don't include children of section with empty title in TOC diff --git a/data/fonts/fa-legacy-mapping.yml b/data/fonts/fa-legacy-mapping.yml new file mode 100644 index 00000000..1c8fdb03 --- /dev/null +++ b/data/fonts/fa-legacy-mapping.yml @@ -0,0 +1,786 @@ +fa-500px: fab-500px +fa-address-book: fas-address-book +fa-address-book-o: far-address-book +fa-address-card: fas-address-card +fa-address-card-o: far-address-card +fa-adjust: fas-adjust +fa-adn: fab-adn +fa-align-center: fas-align-center +fa-align-justify: fas-align-justify +fa-align-left: fas-align-left +fa-align-right: fas-align-right +fa-amazon: fab-amazon +fa-ambulance: fas-ambulance +fa-american-sign-language-interpreting: fas-american-sign-language-interpreting +fa-anchor: fas-anchor +fa-android: fab-android +fa-angellist: fab-angellist +fa-angle-double-down: fas-angle-double-down +fa-angle-double-left: fas-angle-double-left +fa-angle-double-right: fas-angle-double-right +fa-angle-double-up: fas-angle-double-up +fa-angle-down: fas-angle-down +fa-angle-left: fas-angle-left +fa-angle-right: fas-angle-right +fa-angle-up: fas-angle-up +fa-apple: fab-apple +fa-archive: fas-archive +fa-area-chart: fas-chart-area +fa-arrow-circle-down: fas-arrow-circle-down +fa-arrow-circle-left: fas-arrow-circle-left +fa-arrow-circle-o-down: far-arrow-alt-circle-down +fa-arrow-circle-o-left: far-arrow-alt-circle-left +fa-arrow-circle-o-right: far-arrow-alt-circle-right +fa-arrow-circle-o-up: far-arrow-alt-circle-up +fa-arrow-circle-right: fas-arrow-circle-right +fa-arrow-circle-up: fas-arrow-circle-up +fa-arrow-down: fas-arrow-down +fa-arrow-left: fas-arrow-left +fa-arrow-right: fas-arrow-right +fa-arrow-up: fas-arrow-up +fa-arrows: fas-arrows-alt +fa-arrows-alt: fas-expand-arrows-alt +fa-arrows-h: fas-arrows-alt-h +fa-arrows-v: fas-arrows-alt-v +fa-asl-interpreting: fas-american-sign-language-interpreting +fa-assistive-listening-systems: fas-assistive-listening-systems +fa-asterisk: fas-asterisk +fa-at: fas-at +fa-audio-description: fas-audio-description +fa-automobile: fas-car +fa-backward: fas-backward +fa-balance-scale: fas-balance-scale +fa-ban: fas-ban +fa-bandcamp: fab-bandcamp +fa-bank: fas-university +fa-bar-chart: far-chart-bar +fa-bar-chart-o: far-chart-bar +fa-barcode: fas-barcode +fa-bars: fas-bars +fa-bath: fas-bath +fa-bathtub: fas-bath +fa-battery: fas-battery-full +fa-battery-0: fas-battery-empty +fa-battery-1: fas-battery-quarter +fa-battery-2: fas-battery-half +fa-battery-3: fas-battery-three-quarters +fa-battery-4: fas-battery-full +fa-battery-empty: fas-battery-empty +fa-battery-full: fas-battery-full +fa-battery-half: fas-battery-half +fa-battery-quarter: fas-battery-quarter +fa-battery-three-quarters: fas-battery-three-quarters +fa-bed: fas-bed +fa-beer: fas-beer +fa-behance: fab-behance +fa-behance-square: fab-behance-square +fa-bell: fas-bell +fa-bell-o: far-bell +fa-bell-slash: fas-bell-slash +fa-bell-slash-o: far-bell-slash +fa-bicycle: fas-bicycle +fa-binoculars: fas-binoculars +fa-birthday-cake: fas-birthday-cake +fa-bitbucket: fab-bitbucket +fa-bitbucket-square: fab-bitbucket +fa-bitcoin: fab-bitcoin +fa-black-tie: fab-black-tie +fa-blind: fas-blind +fa-bluetooth: fab-bluetooth +fa-bluetooth-b: fab-bluetooth-b +fa-bold: fas-bold +fa-bolt: fas-bolt +fa-bomb: fas-bomb +fa-book: fas-book +fa-bookmark: fas-bookmark +fa-bookmark-o: far-bookmark +fa-braille: fas-braille +fa-briefcase: fas-briefcase +fa-btc: fab-btc +fa-bug: fas-bug +fa-building: fas-building +fa-building-o: far-building +fa-bullhorn: fas-bullhorn +fa-bullseye: fas-bullseye +fa-bus: fas-bus +fa-buysellads: fab-buysellads +fa-cab: fas-taxi +fa-calculator: fas-calculator +fa-calendar: fas-calendar-alt +fa-calendar-check-o: far-calendar-check +fa-calendar-minus-o: far-calendar-minus +fa-calendar-o: far-calendar +fa-calendar-plus-o: far-calendar-plus +fa-calendar-times-o: far-calendar-times +fa-camera: fas-camera +fa-camera-retro: fas-camera-retro +fa-car: fas-car +fa-caret-down: fas-caret-down +fa-caret-left: fas-caret-left +fa-caret-right: fas-caret-right +fa-caret-square-o-down: far-caret-square-down +fa-caret-square-o-left: far-caret-square-left +fa-caret-square-o-right: far-caret-square-right +fa-caret-square-o-up: far-caret-square-up +fa-caret-up: fas-caret-up +fa-cart-arrow-down: fas-cart-arrow-down +fa-cart-plus: fas-cart-plus +fa-cc: far-closed-captioning +fa-cc-amex: fab-cc-amex +fa-cc-diners-club: fab-cc-diners-club +fa-cc-discover: fab-cc-discover +fa-cc-jcb: fab-cc-jcb +fa-cc-mastercard: fab-cc-mastercard +fa-cc-paypal: fab-cc-paypal +fa-cc-stripe: fab-cc-stripe +fa-cc-visa: fab-cc-visa +fa-certificate: fas-certificate +fa-chain: fas-link +fa-chain-broken: fas-unlink +fa-check: fas-check +fa-check-circle: fas-check-circle +fa-check-circle-o: far-check-circle +fa-check-square: fas-check-square +fa-check-square-o: far-check-square +fa-chevron-circle-down: fas-chevron-circle-down +fa-chevron-circle-left: fas-chevron-circle-left +fa-chevron-circle-right: fas-chevron-circle-right +fa-chevron-circle-up: fas-chevron-circle-up +fa-chevron-down: fas-chevron-down +fa-chevron-left: fas-chevron-left +fa-chevron-right: fas-chevron-right +fa-chevron-up: fas-chevron-up +fa-child: fas-child +fa-chrome: fab-chrome +fa-circle: fas-circle +fa-circle-o: far-circle +fa-circle-o-notch: fas-circle-notch +fa-circle-thin: far-circle +fa-clipboard: far-clipboard +fa-clock-o: far-clock +fa-clone: far-clone +fa-close: fas-times +fa-cloud: fas-cloud +fa-cloud-download: fas-cloud-download-alt +fa-cloud-upload: fas-cloud-upload-alt +fa-cny: fas-yen-sign +fa-code: fas-code +fa-code-fork: fas-code-branch +fa-codepen: fab-codepen +fa-codiepie: fab-codiepie +fa-coffee: fas-coffee +fa-cog: fas-cog +fa-cogs: fas-cogs +fa-columns: fas-columns +fa-comment: fas-comment +fa-comment-o: far-comment +fa-commenting: fas-comment-alt +fa-commenting-o: far-comment-dots +fa-comments: fas-comments +fa-comments-o: far-comments +fa-compass: far-compass +fa-compress: fas-compress +fa-connectdevelop: fab-connectdevelop +fa-contao: fab-contao +fa-copy: fas-copy +fa-copyright: far-copyright +fa-creative-commons: fab-creative-commons +fa-credit-card: far-credit-card +fa-credit-card-alt: fas-credit-card +fa-crop: fas-crop +fa-crosshairs: fas-crosshairs +fa-css3: fab-css3 +fa-cube: fas-cube +fa-cubes: fas-cubes +fa-cut: fas-cut +fa-cutlery: fas-utensils +fa-dashboard: fas-tachometer-alt +fa-dashcube: fab-dashcube +fa-database: fas-database +fa-deaf: fas-deaf +fa-deafness: fas-deaf +fa-dedent: fas-outdent +fa-delicious: fab-delicious +fa-desktop: fas-desktop +fa-deviantart: fab-deviantart +fa-diamond: far-gem +fa-digg: fab-digg +fa-dollar: fas-dollar-sign +fa-dot-circle-o: far-dot-circle +fa-download: fas-download +fa-dribbble: fab-dribbble +fa-drivers-license: fas-id-card +fa-drivers-license-o: far-id-card +fa-dropbox: fab-dropbox +fa-drupal: fab-drupal +fa-edge: fab-edge +fa-edit: fas-edit +fa-eercast: fab-sellcast +fa-eject: fas-eject +fa-ellipsis-h: fas-ellipsis-h +fa-ellipsis-v: fas-ellipsis-v +fa-empire: fab-empire +fa-envelope: fas-envelope +fa-envelope-o: far-envelope +fa-envelope-open: fas-envelope-open +fa-envelope-open-o: far-envelope-open +fa-envelope-square: fas-envelope-square +fa-envira: fab-envira +fa-eraser: fas-eraser +fa-etsy: fab-etsy +fa-eur: fas-euro-sign +fa-euro: fas-euro-sign +fa-exchange: fas-exchange-alt +fa-exclamation: fas-exclamation +fa-exclamation-circle: fas-exclamation-circle +fa-exclamation-triangle: fas-exclamation-triangle +fa-expand: fas-expand +fa-expeditedssl: fab-expeditedssl +fa-external-link: fas-external-link-alt +fa-external-link-square: fas-external-link-square-alt +fa-eye: fas-eye +fa-eye-slash: far-eye-slash +fa-eyedropper: fas-eye-dropper +fa-fa: fab-font-awesome +fa-facebook: fab-facebook-f +fa-facebook-f: fab-facebook-f +fa-facebook-official: fab-facebook +fa-facebook-square: fab-facebook-square +fa-fast-backward: fas-fast-backward +fa-fast-forward: fas-fast-forward +fa-fax: fas-fax +fa-feed: fas-rss +fa-female: fas-female +fa-fighter-jet: fas-fighter-jet +fa-file: fas-file +fa-file-archive-o: far-file-archive +fa-file-audio-o: far-file-audio +fa-file-code-o: far-file-code +fa-file-excel-o: far-file-excel +fa-file-image-o: far-file-image +fa-file-movie-o: far-file-video +fa-file-o: far-file +fa-file-pdf-o: far-file-pdf +fa-file-photo-o: far-file-image +fa-file-picture-o: far-file-image +fa-file-powerpoint-o: far-file-powerpoint +fa-file-sound-o: far-file-audio +fa-file-text: fas-file-alt +fa-file-text-o: far-file-alt +fa-file-video-o: far-file-video +fa-file-word-o: far-file-word +fa-file-zip-o: far-file-archive +fa-files-o: far-copy +fa-film: fas-film +fa-filter: fas-filter +fa-fire: fas-fire +fa-fire-extinguisher: fas-fire-extinguisher +fa-firefox: fab-firefox +fa-first-order: fab-first-order +fa-flag: fas-flag +fa-flag-checkered: fas-flag-checkered +fa-flag-o: far-flag +fa-flash: fas-bolt +fa-flask: fas-flask +fa-flickr: fab-flickr +fa-floppy-o: far-save +fa-folder: fas-folder +fa-folder-o: far-folder +fa-folder-open: fas-folder-open +fa-folder-open-o: far-folder-open +fa-font: fas-font +fa-font-awesome: fab-font-awesome +fa-fonticons: fab-fonticons +fa-fort-awesome: fab-fort-awesome +fa-forumbee: fab-forumbee +fa-forward: fas-forward +fa-foursquare: fab-foursquare +fa-free-code-camp: fab-free-code-camp +fa-frown-o: far-frown +fa-futbol-o: far-futbol +fa-gamepad: fas-gamepad +fa-gavel: fas-gavel +fa-gbp: fas-pound-sign +fa-ge: fab-empire +fa-gear: fas-cog +fa-gears: fas-cogs +fa-genderless: fas-genderless +fa-get-pocket: fab-get-pocket +fa-gg: fab-gg +fa-gg-circle: fab-gg-circle +fa-gift: fas-gift +fa-git: fab-git +fa-git-square: fab-git-square +fa-github: fab-github +fa-github-alt: fab-github-alt +fa-github-square: fab-github-square +fa-gitlab: fab-gitlab +fa-gittip: fab-gratipay +fa-glass: fas-glass-martini +fa-glide: fab-glide +fa-glide-g: fab-glide-g +fa-globe: fas-globe +fa-google: fab-google +fa-google-plus: fab-google-plus-g +fa-google-plus-circle: fab-google-plus +fa-google-plus-official: fab-google-plus +fa-google-plus-square: fab-google-plus-square +fa-google-wallet: fab-google-wallet +fa-graduation-cap: fas-graduation-cap +fa-gratipay: fab-gratipay +fa-grav: fab-grav +fa-group: fas-users +fa-h-square: fas-h-square +fa-hacker-news: fab-hacker-news +fa-hand-grab-o: far-hand-rock +fa-hand-lizard-o: far-hand-lizard +fa-hand-o-down: far-hand-point-down +fa-hand-o-left: far-hand-point-left +fa-hand-o-right: far-hand-point-right +fa-hand-o-up: far-hand-point-up +fa-hand-paper-o: far-hand-paper +fa-hand-peace-o: far-hand-peace +fa-hand-pointer-o: far-hand-pointer +fa-hand-rock-o: far-hand-rock +fa-hand-scissors-o: far-hand-scissors +fa-hand-spock-o: far-hand-spock +fa-hand-stop-o: far-hand-paper +fa-handshake-o: far-handshake +fa-hard-of-hearing: fas-deaf +fa-hashtag: fas-hashtag +fa-hdd-o: far-hdd +fa-header: fas-heading +fa-headphones: fas-headphones +fa-heart: fas-heart +fa-heart-o: far-heart +fa-heartbeat: fas-heartbeat +fa-history: fas-history +fa-home: fas-home +fa-hospital-o: far-hospital +fa-hotel: fas-bed +fa-hourglass: fas-hourglass +fa-hourglass-1: fas-hourglass-start +fa-hourglass-2: fas-hourglass-half +fa-hourglass-3: fas-hourglass-end +fa-hourglass-end: fas-hourglass-end +fa-hourglass-half: fas-hourglass-half +fa-hourglass-o: far-hourglass +fa-hourglass-start: fas-hourglass-start +fa-houzz: fab-houzz +fa-html5: fab-html5 +fa-i-cursor: fas-i-cursor +fa-id-badge: far-id-badge +fa-id-card: fas-id-card +fa-id-card-o: far-id-card +fa-ils: fas-shekel-sign +fa-image: fas-image +fa-imdb: fab-imdb +fa-inbox: fas-inbox +fa-indent: fas-indent +fa-industry: fas-industry +fa-info: fas-info +fa-info-circle: fas-info-circle +fa-inr: fas-rupee-sign +fa-instagram: fab-instagram +fa-institution: fas-university +fa-internet-explorer: fab-internet-explorer +fa-intersex: fas-transgender +fa-ioxhost: fab-ioxhost +fa-italic: fas-italic +fa-joomla: fab-joomla +fa-jpy: fas-yen-sign +fa-jsfiddle: fab-jsfiddle +fa-key: fas-key +fa-keyboard-o: far-keyboard +fa-krw: fas-won-sign +fa-language: fas-language +fa-laptop: fas-laptop +fa-lastfm: fab-lastfm +fa-lastfm-square: fab-lastfm-square +fa-leaf: fas-leaf +fa-leanpub: fab-leanpub +fa-legal: fas-gavel +fa-lemon-o: far-lemon +fa-level-down: fas-level-down-alt +fa-level-up: fas-level-up-alt +fa-life-bouy: fas-life-ring +fa-life-buoy: fas-life-ring +fa-life-ring: far-life-ring +fa-life-saver: fas-life-ring +fa-lightbulb-o: far-lightbulb +fa-line-chart: fas-chart-line +fa-link: fas-link +fa-linkedin: fab-linkedin-in +fa-linkedin-square: fab-linkedin +fa-linode: fab-linode +fa-linux: fab-linux +fa-list: fas-list +fa-list-alt: far-list-alt +fa-list-ol: fas-list-ol +fa-list-ul: fas-list-ul +fa-location-arrow: fas-location-arrow +fa-lock: fas-lock +fa-long-arrow-down: fas-long-arrow-alt-down +fa-long-arrow-left: fas-long-arrow-alt-left +fa-long-arrow-right: fas-long-arrow-alt-right +fa-long-arrow-up: fas-long-arrow-alt-up +fa-low-vision: fas-low-vision +fa-magic: fas-magic +fa-magnet: fas-magnet +fa-mail-forward: fas-share +fa-mail-reply: fas-reply +fa-mail-reply-all: fas-reply-all +fa-male: fas-male +fa-map: fas-map +fa-map-marker: fas-map-marker-alt +fa-map-o: far-map +fa-map-pin: fas-map-pin +fa-map-signs: fas-map-signs +fa-mars: fas-mars +fa-mars-double: fas-mars-double +fa-mars-stroke: fas-mars-stroke +fa-mars-stroke-h: fas-mars-stroke-h +fa-mars-stroke-v: fas-mars-stroke-v +fa-maxcdn: fab-maxcdn +fa-meanpath: fab-font-awesome +fa-medium: fab-medium +fa-medkit: fas-medkit +fa-meetup: fab-meetup +fa-meh-o: far-meh +fa-mercury: fas-mercury +fa-microchip: fas-microchip +fa-microphone: fas-microphone +fa-microphone-slash: fas-microphone-slash +fa-minus: fas-minus +fa-minus-circle: fas-minus-circle +fa-minus-square: fas-minus-square +fa-minus-square-o: far-minus-square +fa-mixcloud: fab-mixcloud +fa-mobile: fas-mobile-alt +fa-mobile-phone: fas-mobile +fa-modx: fab-modx +fa-money: far-money-bill-alt +fa-moon-o: far-moon +fa-mortar-board: fas-graduation-cap +fa-motorcycle: fas-motorcycle +fa-mouse-pointer: fas-mouse-pointer +fa-music: fas-music +fa-navicon: fas-bars +fa-neuter: fas-neuter +fa-newspaper-o: far-newspaper +fa-object-group: far-object-group +fa-object-ungroup: far-object-ungroup +fa-odnoklassniki: fab-odnoklassniki +fa-odnoklassniki-square: fab-odnoklassniki-square +fa-opencart: fab-opencart +fa-openid: fab-openid +fa-opera: fab-opera +fa-optin-monster: fab-optin-monster +fa-outdent: fas-outdent +fa-pagelines: fab-pagelines +fa-paint-brush: fas-paint-brush +fa-paper-plane: fas-paper-plane +fa-paper-plane-o: far-paper-plane +fa-paperclip: fas-paperclip +fa-paragraph: fas-paragraph +fa-paste: fas-paste +fa-pause: fas-pause +fa-pause-circle: fas-pause-circle +fa-pause-circle-o: far-pause-circle +fa-paw: fas-paw +fa-paypal: fab-paypal +fa-pencil: fas-pencil-alt +fa-pencil-square: fas-pen-square +fa-pencil-square-o: far-edit +fa-percent: fas-percent +fa-phone: fas-phone +fa-phone-square: fas-phone-square +fa-photo: far-image +fa-picture-o: far-image +fa-pie-chart: fas-chart-pie +fa-pied-piper: fab-pied-piper +fa-pied-piper-alt: fab-pied-piper-alt +fa-pied-piper-pp: fab-pied-piper-pp +fa-pinterest: fab-pinterest +fa-pinterest-p: fab-pinterest-p +fa-pinterest-square: fab-pinterest-square +fa-plane: fas-plane +fa-play: fas-play +fa-play-circle: fas-play-circle +fa-play-circle-o: far-play-circle +fa-plug: fas-plug +fa-plus: fas-plus +fa-plus-circle: fas-plus-circle +fa-plus-square: fas-plus-square +fa-plus-square-o: far-plus-square +fa-podcast: fas-podcast +fa-power-off: fas-power-off +fa-print: fas-print +fa-product-hunt: fab-product-hunt +fa-puzzle-piece: fas-puzzle-piece +fa-qq: fab-qq +fa-qrcode: fas-qrcode +fa-question: fas-question +fa-question-circle: fas-question-circle +fa-question-circle-o: far-question-circle +fa-quora: fab-quora +fa-quote-left: fas-quote-left +fa-quote-right: fas-quote-right +fa-ra: fab-rebel +fa-random: fas-random +fa-ravelry: fab-ravelry +fa-rebel: fab-rebel +fa-recycle: fas-recycle +fa-reddit: fab-reddit +fa-reddit-alien: fab-reddit-alien +fa-reddit-square: fab-reddit-square +fa-refresh: fas-sync +fa-registered: far-registered +fa-remove: fas-times +fa-renren: fab-renren +fa-reorder: fas-bars +fa-repeat: fas-redo +fa-reply: fas-reply +fa-reply-all: fas-reply-all +fa-resistance: fab-rebel +fa-retweet: fas-retweet +fa-rmb: fas-yen-sign +fa-road: fas-road +fa-rocket: fas-rocket +fa-rotate-left: fas-undo +fa-rotate-right: fas-redo +fa-rouble: fas-ruble-sign +fa-rss: fas-rss +fa-rss-square: fas-rss-square +fa-rub: fas-ruble-sign +fa-ruble: fas-ruble-sign +fa-rupee: fas-rupee-sign +fa-s15: fas-bath +fa-safari: fab-safari +fa-save: fas-save +fa-scissors: fas-cut +fa-scribd: fab-scribd +fa-search: fas-search +fa-search-minus: fas-search-minus +fa-search-plus: fas-search-plus +fa-sellsy: fab-sellsy +fa-send: fas-paper-plane +fa-send-o: far-paper-plane +fa-server: fas-server +fa-share: fas-share +fa-share-alt: fas-share-alt +fa-share-alt-square: fas-share-alt-square +fa-share-square: fas-share-square +fa-share-square-o: far-share-square +fa-shekel: fas-shekel-sign +fa-sheqel: fas-shekel-sign +fa-shield: fas-shield-alt +fa-ship: fas-ship +fa-shirtsinbulk: fab-shirtsinbulk +fa-shopping-bag: fas-shopping-bag +fa-shopping-basket: fas-shopping-basket +fa-shopping-cart: fas-shopping-cart +fa-shower: fas-shower +fa-sign-in: fas-sign-in-alt +fa-sign-language: fas-sign-language +fa-sign-out: fas-sign-out-alt +fa-signal: fas-signal +fa-signing: fas-sign-language +fa-simplybuilt: fab-simplybuilt +fa-sitemap: fas-sitemap +fa-skyatlas: fab-skyatlas +fa-skype: fab-skype +fa-slack: fab-slack +fa-sliders: fas-sliders-h +fa-slideshare: fab-slideshare +fa-smile-o: far-smile +fa-snapchat: fab-snapchat +fa-snapchat-ghost: fab-snapchat-ghost +fa-snapchat-square: fab-snapchat-square +fa-snowflake-o: far-snowflake +fa-soccer-ball-o: far-futbol +fa-sort: fas-sort +fa-sort-alpha-asc: fas-sort-alpha-down +fa-sort-alpha-desc: fas-sort-alpha-up +fa-sort-amount-asc: fas-sort-amount-down +fa-sort-amount-desc: fas-sort-amount-up +fa-sort-asc: fas-sort-up +fa-sort-desc: fas-sort-down +fa-sort-down: fas-sort-down +fa-sort-numeric-asc: fas-sort-numeric-down +fa-sort-numeric-desc: fas-sort-numeric-up +fa-sort-up: fas-sort-up +fa-soundcloud: fab-soundcloud +fa-space-shuttle: fas-space-shuttle +fa-spinner: fas-spinner +fa-spoon: fas-utensil-spoon +fa-spotify: fab-spotify +fa-square: fas-square +fa-square-o: far-square +fa-stack-exchange: fab-stack-exchange +fa-stack-overflow: fab-stack-overflow +fa-star: fas-star +fa-star-half: fas-star-half +fa-star-half-empty: fas-star-half +fa-star-half-full: fas-star-half +fa-star-half-o: far-star-half +fa-star-o: far-star +fa-steam: fab-steam +fa-steam-square: fab-steam-square +fa-step-backward: fas-step-backward +fa-step-forward: fas-step-forward +fa-stethoscope: fas-stethoscope +fa-sticky-note: fas-sticky-note +fa-sticky-note-o: far-sticky-note +fa-stop: fas-stop +fa-stop-circle: fas-stop-circle +fa-stop-circle-o: far-stop-circle +fa-street-view: fas-street-view +fa-strikethrough: fas-strikethrough +fa-stumbleupon: fab-stumbleupon +fa-stumbleupon-circle: fab-stumbleupon-circle +fa-subscript: fas-subscript +fa-subway: fas-subway +fa-suitcase: fas-suitcase +fa-sun-o: far-sun +fa-superpowers: fab-superpowers +fa-superscript: fas-superscript +fa-support: far-life-ring +fa-table: fas-table +fa-tablet: fas-tablet-alt +fa-tachometer: fas-tachometer-alt +fa-tag: fas-tag +fa-tags: fas-tags +fa-tasks: fas-tasks +fa-taxi: fas-taxi +fa-telegram: fab-telegram +fa-television: fas-tv +fa-tencent-weibo: fab-tencent-weibo +fa-terminal: fas-terminal +fa-text-height: fas-text-height +fa-text-width: fas-text-width +fa-th: fas-th +fa-th-large: fas-th-large +fa-th-list: fas-th-list +fa-themeisle: fab-themeisle +fa-thermometer: fas-thermometer +fa-thermometer-0: fas-thermometer-empty +fa-thermometer-1: fas-thermometer-quarter +fa-thermometer-2: fas-thermometer-half +fa-thermometer-3: fas-thermometer-three-quarters +fa-thermometer-4: fas-thermometer-full +fa-thermometer-empty: fas-thermometer-empty +fa-thermometer-full: fas-thermometer-full +fa-thermometer-half: fas-thermometer-half +fa-thermometer-quarter: fas-thermometer-quarter +fa-thermometer-three-quarters: fas-thermometer-three-quarters +fa-thumb-tack: fas-thumbtack +fa-thumbs-down: fas-thumbs-down +fa-thumbs-o-down: far-thumbs-down +fa-thumbs-o-up: far-thumbs-up +fa-thumbs-up: fas-thumbs-up +fa-ticket: fas-ticket-alt +fa-times: fas-times +fa-times-circle: fas-times-circle +fa-times-circle-o: far-times-circle +fa-times-rectangle: fas-window-close +fa-times-rectangle-o: far-window-close +fa-tint: fas-tint +fa-toggle-down: far-caret-square-down +fa-toggle-left: far-caret-square-left +fa-toggle-off: fas-toggle-off +fa-toggle-on: fas-toggle-on +fa-toggle-right: far-caret-square-right +fa-toggle-up: far-caret-square-up +fa-trademark: fas-trademark +fa-train: fas-train +fa-transgender: fas-transgender +fa-transgender-alt: fas-transgender-alt +fa-trash: fas-trash-alt +fa-trash-o: far-trash-alt +fa-tree: fas-tree +fa-trello: fab-trello +fa-tripadvisor: fab-tripadvisor +fa-trophy: fas-trophy +fa-truck: fas-truck +fa-try: fas-lira-sign +fa-tty: fas-tty +fa-tumblr: fab-tumblr +fa-tumblr-square: fab-tumblr-square +fa-turkish-lira: fas-lira-sign +fa-tv: fas-tv +fa-twitch: fab-twitch +fa-twitter: fab-twitter +fa-twitter-square: fab-twitter-square +fa-umbrella: fas-umbrella +fa-underline: fas-underline +fa-undo: fas-undo +fa-universal-access: fas-universal-access +fa-university: fas-university +fa-unlink: fas-unlink +fa-unlock: fas-unlock +fa-unlock-alt: fas-unlock-alt +fa-unsorted: fas-sort +fa-upload: fas-upload +fa-usb: fab-usb +fa-usd: fas-dollar-sign +fa-user: fas-user +fa-user-circle: fas-user-circle +fa-user-circle-o: far-user-circle +fa-user-md: fas-user-md +fa-user-o: far-user +fa-user-plus: fas-user-plus +fa-user-secret: fas-user-secret +fa-user-times: fas-user-times +fa-users: fas-users +fa-vcard: fas-address-card +fa-vcard-o: far-address-card +fa-venus: fas-venus +fa-venus-double: fas-venus-double +fa-venus-mars: fas-venus-mars +fa-viacoin: fab-viacoin +fa-viadeo: fab-viadeo +fa-viadeo-square: fab-viadeo-square +fa-video-camera: fas-video +fa-vimeo: fab-vimeo-v +fa-vimeo-square: fab-vimeo-square +fa-vine: fab-vine +fa-vk: fab-vk +fa-volume-control-phone: fas-phone-volume +fa-volume-down: fas-volume-down +fa-volume-off: fas-volume-off +fa-volume-up: fas-volume-up +fa-warning: fas-exclamation-triangle +fa-wechat: fab-weixin +fa-weibo: fab-weibo +fa-weixin: fab-weixin +fa-whatsapp: fab-whatsapp +fa-wheelchair: fas-wheelchair +fa-wheelchair-alt: fab-accessible-icon +fa-wifi: fas-wifi +fa-wikipedia-w: fab-wikipedia-w +fa-window-close: fas-window-close +fa-window-close-o: far-window-close +fa-window-maximize: far-window-maximize +fa-window-minimize: fas-window-minimize +fa-window-restore: far-window-restore +fa-windows: fab-windows +fa-won: fas-won-sign +fa-wordpress: fab-wordpress +fa-wpbeginner: fab-wpbeginner +fa-wpexplorer: fab-wpexplorer +fa-wpforms: fab-wpforms +fa-wrench: fas-wrench +fa-xing: fab-xing +fa-xing-square: fab-xing-square +fa-y-combinator: fab-y-combinator +fa-y-combinator-square: fab-hacker-news +fa-yahoo: fab-yahoo +fa-yc: fab-y-combinator +fa-yc-square: fab-hacker-news +fa-yelp: fab-yelp +fa-yen: fas-yen-sign +fa-yoast: fab-yoast +fa-youtube: fab-youtube +fa-youtube-play: fab-youtube +fa-youtube-square: fab-youtube-square diff --git a/lib/asciidoctor/pdf/ext.rb b/lib/asciidoctor/pdf/ext.rb index b29e3647..bbb565c7 100644 --- a/lib/asciidoctor/pdf/ext.rb +++ b/lib/asciidoctor/pdf/ext.rb @@ -5,5 +5,6 @@ require_relative 'ext/asciidoctor' require_relative 'ext/pdf-core' require_relative 'ext/prawn' require_relative 'ext/prawn-gmagick' +require_relative 'ext/prawn-icon' require_relative 'ext/prawn-svg' require_relative 'ext/prawn-table' diff --git a/lib/asciidoctor/pdf/ext/prawn-icon.rb b/lib/asciidoctor/pdf/ext/prawn-icon.rb new file mode 100644 index 00000000..defb779e --- /dev/null +++ b/lib/asciidoctor/pdf/ext/prawn-icon.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +require 'prawn/icon' +Prawn::Icon::Compatibility.prepend (::Module.new { def warning *_args; end }) +require_relative 'prawn-icon/legacy' +require_relative 'prawn-icon/interface' diff --git a/lib/asciidoctor/pdf/ext/prawn-icon/interface.rb b/lib/asciidoctor/pdf/ext/prawn-icon/interface.rb new file mode 100644 index 00000000..0020742c --- /dev/null +++ b/lib/asciidoctor/pdf/ext/prawn-icon/interface.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Prawn::Icon::Interface + def icon_font_data family + ::Prawn::Icon::FontData.load self, family + end + + def resolve_legacy_icon_name name + ::Prawn::Icon::Legacy.mapping[%(fa-#{name})] + end +end diff --git a/lib/asciidoctor/pdf/ext/prawn-icon/legacy.rb b/lib/asciidoctor/pdf/ext/prawn-icon/legacy.rb new file mode 100644 index 00000000..6fa5e012 --- /dev/null +++ b/lib/asciidoctor/pdf/ext/prawn-icon/legacy.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Prawn::Icon::Legacy + FontsDir = ::File.absolute_path %(#{__dir__}/../../../../../data/fonts) + MappingDataPath = ::File.join FontsDir, 'fa-legacy-mapping.yml' + class << self + def mapping + @mapping ||= YAML.load_file MappingDataPath + end + end +end diff --git a/lib/asciidoctor/pdf/ext/prawn/extensions.rb b/lib/asciidoctor/pdf/ext/prawn/extensions.rb index cda4c255..c37c4df4 100644 --- a/lib/asciidoctor/pdf/ext/prawn/extensions.rb +++ b/lib/asciidoctor/pdf/ext/prawn/extensions.rb @@ -2,10 +2,6 @@ Prawn::Font::AFM.instance_variable_set :@hide_m17n_warning, true -require 'prawn/icon' - -Prawn::Icon::Compatibility.prepend (::Module.new { def warning *_args; end }) - module Asciidoctor module Prawn module Extensions @@ -322,7 +318,7 @@ module Asciidoctor if name options = { size: options } if ::Numeric === options if IconSets.include? name - ::Prawn::Icon::FontData.load self, name + icon_font_data name options = options.reject {|k| k == :style } if options.key? :style end end @@ -404,14 +400,6 @@ module Asciidoctor string == PlaceholderChar ? @character_spacing : super end - def icon_font_data family - ::Prawn::Icon::FontData.load self, family - end - - def resolve_legacy_icon_name name - ::Prawn::Icon::Compatibility::SHIMS[%(fa-#{name})] - end - def calc_line_metrics line_height, font = self.font, font_size = self.font_size line_height_length = line_height * font_size leading = line_height_length - font_size diff --git a/spec/icon_spec.rb b/spec/icon_spec.rb index c1c76971..6e9fcaff 100644 --- a/spec/icon_spec.rb +++ b/spec/icon_spec.rb @@ -205,6 +205,19 @@ describe 'Asciidoctor::PDF::Converter - Icon' do end end + it 'should use icon from fas set if not explicitly remapped by prawn/icon' do + (expect do + pdf = to_pdf <<~'END', analyze: true + :icons: font + + Use a icon:circle[] to indicate which candidate you are voting for. + END + hdd_text = pdf.find_text ?\uf111 + (expect hdd_text).to have_size 1 + (expect hdd_text[0][:font_name]).to eql 'FontAwesome5Free-Solid' + end).to log_message severity: :INFO, message: 'circle icon found in deprecated fa icon set; using circle from fas icon set instead', using_log_level: :INFO + end + it 'should remap legacy icon name if icon set is not specified and report remapping' do (expect do pdf = to_pdf <<~'END', analyze: true @@ -282,7 +295,7 @@ describe 'Asciidoctor::PDF::Converter - Icon' do heart_text = pdf.text[0] (expect heart_text[:string]).to eql ?\uf004 - (expect heart_text[:font_name]).to eql 'FontAwesome5Free-Regular' + (expect heart_text[:font_name]).to eql 'FontAwesome5Free-Solid' (expect heart_text[:font_color]).to eql 'FF0000' end -- cgit v1.2.3