Giter Club home page Giter Club logo

icon_font_generator's Introduction

icon_font_generator

pub package

The icon_font_generator package provides an easy way to convert SVG icons to OpenType font and generate Flutter-compatible class that contains identifiers for the icons (just like CupertinoIcons or Icons classes).

The package is written fully in Dart and doesn't require any external dependency. Compatible with dart2js and dart2native.

Font generation

Install via dev dependency

$ flutter pub add --dev icon_font_generator

# And it's ready to go:
$ flutter pub run icon_font_generator:generate <input-svg-dir> <output-font-file> [options]

or Globally activate the package:

$ pub global activate icon_font_generator

# And it's ready to go:
$ icon_font_generator <input-svg-dir> <output-font-file> [options]

Required positional arguments:

  • <input-svg-dir> Path to the input directory that contains .svg files.
  • <output-font-file> Path to the output font file. Should have .otf extension.

Flutter class options:

  • -o or --output-class-file=<path> Output path for Flutter-compatible class that contains identifiers for the icons.
  • -c or --class-name=<name> Name for a generated class.
  • -p or --package=<name> Name of a package that provides a font. Used to provide a font through package dependency.
  • --[no-]format Format dart generated code.

Font options:

  • -f or --font-name=<name> Name for a generated font.
  • --[no-]normalize Enables glyph normalization for the font. Disable this if every icon has the same size and positioning. (defaults to on)
  • --[no-]ignore-shapes Disables SVG shape-to-path conversion (circle, rect, etc.). (defaults to on)

Other options:

  • -z or --config-file=<path> Path to icon_font_generator yaml configuration file. pubspec.yaml and icon_font.yaml files are used by default.
  • -r or --recursive Recursively look for .svg files.
  • -v or --verbose Display every logging message.
  • -h or --help Shows usage information.

Usage example:

$ icon_font_generator assets/svg/ fonts/my_icons_font.otf --output-class-file=lib/my_icons.dart -r

Updated Flutter project's pubspec.yaml:

flutter:
  fonts:
    - family: My Icons
      fonts:
        - asset: fonts/my_icons_font.otf

Config file

icon_font_generator's configuration can also be placed in yaml file. Add icon_font section to either pubspec.yaml or icon_font.yaml file:

icon_font:
  input_svg_dir: "assets/svg/"
  output_font_file: "fonts/my_icons_font.otf"
  
  output_class_file: "lib/my_icons.dart"
  class_name: "MyIcons"
  package: my_font_package
  format: true

  font_name: "My Icons"
  normalize: true
  ignore_shapes: true

  recursive: true
  verbose: false

input_svg_dir and output_font_file keys are required. It's possible to specify any other config file by using --config-file option.

Using API

svgToOtf and generateFlutterClass functions can be used for generating font and Flutter class.

The example of API usage is located in example folder.

Notes

  • Generated OpenType font is using CFF table.
  • Generated font is using PostScript Table (post) of version 3.0, i.e., it doesn't contain glyph names.
  • Supported SVG elements: path, g, circle, rect, polyline, polygon, line.
  • SVG transforms are applied to paths according to specs.
  • SVG <g> element's children are expanded to the root with transformations applied. Anything else related to the group is ignored and group referencing is not supported.
  • Consider using Non-zero fill rule.
  • When ignoreShapes is set to false, every SVG shape's (circle, rect, etc.) outline is converted to path. Note that any attributes like "fill" or "stroke" are ignored and only the outline is used, so the resulting glyph may look different from SVG icon. It's recommended to convert every element in SVG to path.
  • When normalize is set to false, it's recommended that SVG icons have the same height. Otherwise, final result might not look as expected.
  • When Flutter class is generated, static variables names derive from SVG file name converted to pascal case with non-allowed characters removed. Name is set to 'unnamed', if it's empty. Suffix '_{i+1}' is added, if name already exists.

Contributing

Any suggestions, issues, pull requests are welcomed.

License

MIT

Credits

This software is fork of unsupported package:

icon_font_generator's People

Contributors

hanneskuettner avatar jupi007 avatar pkozlovskiy avatar prateekmedia avatar sergeshkurko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

icon_font_generator's Issues

Unable to generator icon

I tried to create simple icons from svg but this error was given:

[email protected] install C:\Users\Vipin Malik\AppData\Roaming\Pub\Cache\global_packages\icon_font_generator\node_modules\ttf2woff2
(node-gyp rebuild > builderror.log) || (exit 0)

Is this issue related to the package side or my side?

Upgrade logger package please

[] flutter pub upgrade
Resolving dependencies...
Because icon_font_generator >=4.0.0 depends on logger ^1.3.0 and yourapp depends on logger ^2.0.1, icon_font_generator >=4.0.0 is forbidden.
So, because yourapp depends on icon_font_generator ^4.0.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Consider downgrading your constraint on icon_font_generator: flutter pub add dev:icon_font_generator:^3.2.0
exit code 1

const declation

Prefer declaring const for immutable like.

can u generate like const UiIcons._();

By the way amazing package using in the company..

[macOS]: Deletion failed (OS Error: Permission denied, errno = 13)

I cannot generate icons on macOS.

❯ icon_font_generator --from=icons --class-name=StreamlineIcons --out-font=assets/fonts/streamline_icons.ttf --out-flutter=lib/app/services/streamline_icons.dart
Unhandled exception:
FileSystemException: Deletion failed, path = '/Users/rebar/.pub-cache/global_packages/icon_font_generator/temp_icons' (OS Error: Permission denied, errno = 13)
#0      _Directory._delete.<anonymous closure> (dart:io/directory_impl.dart:192:9)
<asynchronous suspension>
#1      GenerateCommand.run (file:///Users/rebar/.pub-cache/hosted/pub.dartlang.org/icon_font_generator-3.2.0/bin/icon_font_generator.dart:115:7)
<asynchronous suspension>
#2      CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#3      main (file:///Users/rebar/.pub-cache/hosted/pub.dartlang.org/icon_font_generator-3.2.0/bin/icon_font_generator.dart:13:5)
<asynchronous suspension>

Add symlink support

I maintain a very large icon pack: https://github.com/ubuntu/yaru_icons.dart
Sometimes need to duplicate some icon source files for similar icons with different names.
Ofc, I can use real symlink, but this mean to increase the font size, while I could just reuse an existent font code.

A PR which add this feature will follow in a moment :)

Empty Space Above Icons - Vertical Alignment Issue

Currently, when generating icons using the icon font generator, the icons are aligned to the baseline by default. This causes additional empty space above the icons, making them appear misaligned in layouts.

image

How I can fix it?

dart class generation not working

dart class generation not working

stack

Unhandled exception:
Invalid argument(s): Register has invalid characters clock-wait
#0 new Register (package:register/register.dart:15:7)
#1 generateFlutterClass. (package:icon_font_generator/generate_flutter_class.dart:25:40)
#2 MappedIterator.moveNext (dart:_internal/iterable.dart:395:18)
#3 Iterable.join (dart:core/iterable.dart:372:23)
#4 generateFlutterClass (package:icon_font_generator/generate_flutter_class.dart:46:57)

#5 GenerateCommand.run (file:///Users/karaken/.pub-cache/hosted/pub.dartlang.org/icon_font_generator-1.0.0/bin/icon_font_generator.dart:200:39)

#6 CommandRunner.runCommand (package:args/command_runner.dart:197:27)
#7 CommandRunner.run. (package:args/command_runner.dart:112:25)
#8 new Future.sync (dart:async/future.dart:224:31)
#9 CommandRunner.run (package:args/command_runner.dart:112:14)
#10 main (file:///Users/karaken/.pub-cache/hosted/pub.dartlang.org/icon_font_generator-1.0.0/bin/icon_font_generator.dart:13:18)
#11 _startIsolate. (dart:isolate-patch/isolate_patch.dart:305:32)
#12 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:174:12)

Missing features

Hi @SergeShkurko,
I noticed that you have done a big update of this package, and it looks like there are a lot less problems than with fantasticon.
I really wanted to use it to build the yaru_icons package, but it's missing a lot of features compared to the previous version.
So I've patched it in my fork to add them:

  • Naming strategy (snake/camel) ;
  • consider folder name ;
  • allow hyphens in filenames ;
  • all icons map ;
  • symlink support.

I'd like to know if you'd be open to some PRs to add these features?

Icon size is too small

Hello, i just tried this, but the result icon is so small

https://i.imgur.com/Hi4qEel.png

look at the top left, bottom right and top right of the screenshott.

in the end I just generate my font with iconmoon and then edit icons.dart generated by this package.

Generate one only

Hi, I'm glad about this package.

I think this lib could add only one icon in the current font file.

Make icon class data non private

It could be imo nice to not make the icon data class private to allow stuff like this:

Icon(UiIconsData(0xf101))

This allow for example to create a list of all icons by looping between a range of code point.
I can make a PR if you want :)

Tool permanently unusable when accidentally using a dash in a svg filename.

I had an .svg file with a dash in it and ran the generator. The generator failed with the following output:

Generated /home/geertjohan/.pub-cache/global_packages/icon_font_generator/temp_font/IrmaIcons.ttf
Generated /home/geertjohan/.pub-cache/global_packages/icon_font_generator/map.json
Done
Unhandled exception:
Invalid argument(s): Register has invalid characters arrow-down
#0      new Register (package:register/register.dart:15:7)
#1      generateFlutterClass.<anonymous closure> (package:icon_font_generator/generate_flutter_class.dart:25:40)
#2      MappedIterator.moveNext (dart:_internal/iterable.dart:393:18)
#3      Iterable.join (dart:core/iterable.dart:370:23)
#4      generateFlutterClass (package:icon_font_generator/generate_flutter_class.dart:46:57)
<asynchronous suspension>
#5      GenerateCommand.run (file:///home/geertjohan/.pub-cache/hosted/pub.dartlang.org/icon_font_generator-0.0.7/bin/icon_font_generator.dart:186:39)
<asynchronous suspension>
#6      CommandRunner.runCommand (package:args/command_runner.dart:197:27)
<asynchronous suspension>
#7      CommandRunner.run.<anonymous closure> (package:args/command_runner.dart:112:25)
#8      new Future.sync (dart:async/future.dart:224:31)
#9      CommandRunner.run (package:args/command_runner.dart:112:14)
#10     main (file:///home/geertjohan/.pub-cache/hosted/pub.dartlang.org/icon_font_generator-0.0.7/bin/icon_font_generator.dart:13:18)
<asynchronous suspension>
#11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:303:32)
#12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

After renaming the arrow-down.svg to arrow_down.svg, the tool keeps complaining with the same error. I found that the issue is fixed after removing map.json, temp_fonts and temp_icons from /home/geertjohan/.pub-cache/global_packages/icon_font_generator. arrow-down.svg was being cached in the temp dir, but the temp dir is not removed when the tool exits with an error.

I think the solution is to always cleanup the temp dirs, even if the tool exits with an error.

Cannot extract a file from path

I'm facing this issue when I'm trying to generate the icons.

C:\Users\theza\AndroidStudioProjects\reactions_test>icon_font_generator --from=assets/ic
ons --class-name=UiIcons --out-font=assets/fonts/io_icons.ttf --out-flutter=lib/widgets/
icons.dart

Unhandled exception:
Unsupported operation: Cannot extract a file path from a c URI
#0      _Uri.toFilePath (dart:core/uri.dart:2636:7)
#1      new File.fromUri (dart:io/file.dart:248:49)
#2      GenerateCommand.run (file:///C:/Users/theza/AppData/Local/Pub/Cache/hosted/pub.dartlang.org/icon_font_generator-3.1.0/bin/icon_font_generator.dart:111:27)
<asynchronous suspension>
#3      CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#4      main (file:///C:/Users/theza/AppData/Local/Pub/Cache/hosted/pub.dartlang.org/icon_font_generator-3.1.0/bin/icon_font_generator.dart:13:5)
<asynchronous suspension>

Error with IconData

lib/widgets/icons.dart(1099,16): error GBE42D792: 'IconData' isn't a type. [[C:\Users\len5due\Music\baustellentool\build\windows\flutter\flutter_assemble.vcxproj]

Problem in Windows with the IconData Datatype

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.