Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avoid reserved Codepoints U+FE00...U+FE0F and U+FE20...U+FE2F #568

Open
stephenquan opened this issue Jun 3, 2024 · 1 comment
Open

Comments

@stephenquan
Copy link

stephenquan commented Jun 3, 2024

The following codepoints are reserved and should be avoided:

In my project I have 3380 SVGs icons. I am not explicitly setting codepoints. Codepoints U+F101 (DEFAULT_START_CODEPOINT) ... U+FE3F are automatically allocated by fantasticon. However, these codepoints collide with the reserved codepoints and create rendering issues.

Here's a repro makeicons.sh script:

#!/bin/bash

# Generate 3380 SVG icons (solid triangle)
mkdir -p icons
((DEFAULT_START_CODEPOINT=16#f101))
for ((i=0;i<3380;i++))
do
  echo '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M16 8L24 24 L 8 24z"/></svg>' > $(printf 'icons/icon-%x.svg' $((DEFAULT_START_CODEPOINT+i)))
  if ((i % 100 == 0)); then echo "$((i+1)) icons created ..."; fi
done
echo "$i total icons created"

# Generate my-icons.js
cat > my-icons.js <<EOF
module.exports = {
  name: 'my-icons',
  fontHeight: 500,
  normalize: true,
  inputDir: './icons',
  outputDir: './dist',
  fontTypes: ['ttf'],
  assetTypes: ['css', 'json', 'html'],
  formatOptions: {
    json: {
      indent: 2
    }
  },
  getIconId: ({
    basename,
    relativeDirPath,
    absoluteFilePath,
    relativeFilePath,
    index
  }) => {
    return basename;
  }
};
EOF

# Generate my-icons.ttf
mkdir -p dist
fantasticon --config ./my-icons.js

dist/my-icons.html below shows that icons in U+FE00...U+FE0F are blank and icons in the U+FE20...U+FE2F` are not centered but left jusitifed.

image

If #527 was implemented, it could help dodge the problematic codepoints.

@stephenquan stephenquan changed the title Icons not generated for the 16 codepoints 0xfe00 - 0xfe0f Avoid Variation Codepoints U+FE00 - U+FE0F Jun 4, 2024
@stephenquan stephenquan changed the title Avoid Variation Codepoints U+FE00 - U+FE0F Avoid reserved Codepoints U+FE00...U+FE0F and U+FE20...U+FE2F Jun 4, 2024
@stephenquan
Copy link
Author

stephenquan commented Jun 5, 2024

Workaround, insert into the codepoints dictionary object reservation for the affected codepoints, e.g.

module.exports = {
  name: 'my-icons',
  fontHeight: 500,
  normalize: true,
  inputDir: './icons',
  outputDir: './dist',
  fontTypes: ['ttf'],
  assetTypes: ['css', 'json', 'html'],
  formatOptions: {
    json: {
      indent: 2
    }
  },
  codepoints: {
    // U+FE00...U+FE0F Variation Selectors - see https://codepoints.net/variation_selectors
    'variable-selector-00': 0xfe00,
    'variable-selector-01': 0xfe01,
    'variable-selector-02': 0xfe02,
    'variable-selector-03': 0xfe03,
    'variable-selector-04': 0xfe04,
    'variable-selector-05': 0xfe05,
    'variable-selector-06': 0xfe06,
    'variable-selector-07': 0xfe07,
    'variable-selector-08': 0xfe08,
    'variable-selector-09': 0xfe09,
    'variable-selector-0a': 0xfe0a,
    'variable-selector-0b': 0xfe0b,
    'variable-selector-0c': 0xfe0c,
    'variable-selector-0d': 0xfe0d,
    'variable-selector-0e': 0xfe0e,
    'variable-selector-0f': 0xfe0f,

    // U+FE20...U+FE2F Combining Half Marks - see https://codepoints.net/combining_half_marks
    'combining-half-marks-00': 0xfe20,
    'combining-half-marks-01': 0xfe21,
    'combining-half-marks-02': 0xfe22,
    'combining-half-marks-03': 0xfe23,
    'combining-half-marks-04': 0xfe24,
    'combining-half-marks-05': 0xfe25,
    'combining-half-marks-06': 0xfe26,
    'combining-half-marks-07': 0xfe27,
    'combining-half-marks-08': 0xfe28,
    'combining-half-marks-09': 0xfe29,
    'combining-half-marks-0a': 0xfe2a,
    'combining-half-marks-0b': 0xfe2b,
    'combining-half-marks-0c': 0xfe2c,
    'combining-half-marks-0d': 0xfe2d,
    'combining-half-marks-0e': 0xfe2e,
    'combining-half-marks-0f': 0xfe2f,
  },
  getIconId: ({
    basename,
    relativeDirPath,
    absoluteFilePath,
    relativeFilePath,
    index
  }) => {
    return basename;
  }
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant