Giter VIP home page Giter VIP logo

fontforge's Introduction

FontForge CI Build status Coverity Scan Build Status

FontForge Logo

FontForge is a free (libre) font editor for Windows, Mac OS X and GNU+Linux. Use it to create, edit and convert fonts in OpenType, TrueType, UFO, CID-keyed, Multiple Master, and many other formats.

fontforge.org — homepage

designwithfontforge.com — font creation manual

Getting help

The bug tracker is for reporting bugs, not for asking questions. Please direct questions to one of the following:

Installation & contributing

INSTALL.md — developer instructions to build from source

setup_linux_deps.sh — a list of installation dependencies

CONTRIBUTING.md — contributing guidelines

fontforge's People

Contributors

abelcheung avatar adrientetar avatar anagnost avatar blipvert avatar coolwanglu avatar ctrlcctrlv avatar davelab6 avatar dmeranda avatar dscorbett avatar frank-trampe avatar gioele avatar iorsh avatar jhps avatar joescat avatar jrbastien avatar jtanx avatar khaledhosny avatar lemzwerg avatar linusromer avatar maddthesane avatar mhosken avatar michal-n avatar mihailjp avatar monkeyiq avatar mozbugbox avatar rrthomas avatar serval2412 avatar skef avatar tshinnic avatar yurchor 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fontforge's Issues

-Wc++-compat warning flag

I recommend eliminating all of the numerous -Wc++-compat warnings. Especially so with the struct/union/enum declarations embedded in each other, because these cause serious problems with foreign function interface, and are a questionable and relatively rare practice, anyway. I had to work around a lot of these when using Pure and Cython.

C++ compatibility mostly consists of eliminating things that are illegal in C++ because they ought to have been illegal in C in the first place.

Make tools palette resizable

  • menu packing to consider icon image size and scale icons to fit.

The menu lines are drawn by GTextInfoDraw() which returns the actual height used based on the max of the (icon) image and the font. GMenuDrawMenuLine() returns this, but the menu functions GMenuDrawLines() and gmenu_expose() ignore the result and just multiply the font height to set the y value.

  • make tools palette resizable

Rewrite feature file support

That stuff needs a rewrite, for both clarity and generality.

Please do not let this stop people from patching up the current code. It’s called maintenance. :)

PDF ToUnicode CMap is not fully support

A ToUnicode CMap inside a PDF file shows how to interpret the charcodes into Unicode values.

It may refer to a standard CMap, and add some modification.

Currently those modifications by begin/end bfchar/bfrange in ToUnicode CMaps as parsed and recognized.

However the reference part is not parsed.

In the end of pdf_getcmap in parsepdf.c, it's assumed that the CMap has been fully parsed, and all glyphs have been mapped to correct locations, which is not the case if the ToUnicode CMap only refer to a standard CMap.

What's more, the CMap parsing code in encoding.c is static, I wonder why.

Redesign the Font View

Other font editors present the glyph table in their Font Views in a structured way, which helps users understand and navigate a character set on more than just an individual glyph by glyph way. The proportions of the cells can also be redesigned to be more pleasing.

Crash on "Print" window opened for Vertical Metrics fonts

If the current font has vertical metrics, FF crashes when opening "Print" window (by which we are able to check out something like typesetting samples). I've reproduced this issue on both OpenSUSE 12.1 on x86_64, and Cygwin on Win7 32bit. Failure in making of vertical typesetting sample?

Tested fonts with which work fine: Doulos SIL (Latin/Cyrillic font), Junicode (Latin/Greek font), Nanum Myeongjo (Korean font without vertical metrics).
Tested fonts which cause crash: IPA Gothic (Japanese font with vertical metrics), WenQuanYi ZenHei (Chinese font with vertical metrics).

Extend the Styles tools

The 'style' tools make it easy and fun to prototype family styles, but its quite a manual process.

Add a feature (perhaps as a Python script) to iterate over a range of options (interpolation style)

Add real time preview

Metric window glitch

When typing something into the textbox on the metric window, the window goes into a rubbish.
On my machine with Cairo 1.10.2-14.1.3 (in OpenSUSE 12.1 x86_64 repository), looks like http://twitpic.com/akvrir.
Once this occured, other windows (at least the save-before-closing confirmation dialog) will be affected, looking like http://twitpic.com/akvs0x.
I was able to detect by which commit this issue was introduced with git-bisect tools; this was 3ebbf03 "Use cairo drawing for all windows".

Convert hardcoded pointer icons to PNGs

  1. Convert the cursors built into fontforge (fontforge/cursors.c) into PNGs and an xcursorgen.conf file and store them in fontforge/cursors/
  2. Configure the build system for this directory that converts them into Xcur files using http://www.xfree86.org/4.8.0/xcursorgen.1.html
  3. have 'make install' store them in ${PREFIX}/share/fontforge/cursors/
  4. add a Gdraw.GGadget.CursorPath to the X Resources settings that works like ImagePath

State languagesystems at start of FEA files

Adam Twardoch suggested:

Adobe recommends that at the beginning of a FEA file, an enumerative
list of languagesystems that are used in the feature definitions is
included.

This would be a very useful thing to add to font.generateFeatureFile().

For example, for EB-Garamond ( https://github.com/georgd/EB-Garamond/ ),
the generated FEA file should start with:

languagesystem DFLT dflt;
languagesystem grek dflt;
languagesystem cyrl dflt;
languagesystem cyrl SRB ;
languagesystem cyrl MKD ;
languagesystem latn dflt;
languagesystem latn AZE ;
languagesystem latn TRK ;
languagesystem latn CAT ;
languagesystem latn LAT ;
languagesystem latn CRT ;
languagesystem latn DEU ;

with #GSUB etc. to follow after it.

This is not a strict requirement of the FEA syntax, but it would improve
compatibility of the FontForge-generated FEA files with Adobe FDK for
OpenType, and would also contribute to the readability of the generated
FEA files.

http://old.nabble.com/Git-commit-messages-guidelines-to34406693.html

Versioned Backups

FontForge currently retains a single revision when re-saving a file, but it should

  • be able to retain any number of revisions
  • with filenames like "file.sfd-32" (similar to Emacs, cf https://twitter.com/chemoelectric/status/246709095531429889)
  • have a preference "RevisionsToRetain "
  • have the pref tool tip as, "When Saving, keep this number of previous versions of the file. file.sfd-01 will be the last saved file, file.sfd-02 will be the file saved before that, and so on. If you set this to 0 then no revisions will be retained."
  • with a default value of 32
  • with a 0 value turning the feature off
  • save() in http://fontforge.org/scripting-alpha.html#Save should require a new int arg to enable retaining revisions
  • save() in http://fontforge.org/python.html should require a new int arg to enable retaining revisions
  • if the Save() scripting command has no int arg, it should check to see if any revisions currently exist. if found, then retain that number of revisions (and increase them to the number specified in prefs). else if none found, then don't start retaining any. This is true both with and without a filename arg.
  • the value of the RevisionsToRetain pref should be settable from Native scripting
  • the value of the RevisionsToRetain pref should be settable from Python scripting

Test suite

The test suite has not all been converted over yet. Convert it all over. Also make the test suite easier to expand.

Documentation for autotest is in the autoconf manual.

configure-fontforge.h needs to be called config.h

Which one should I include ? or both ?

Currently FONTFORGE_CONFIG_USE_DOUBLE is defined in both file(if configured so), and there's always a warning about it.

And do you think config.h is such common name, that is very much likely to conflict with other projects?

Build fails 'ld: 87 duplicate symbols for architecture x86_64'

@khaledhosny this didn't happen last night, I'm guessing its related to the pango branch merge.

==> Cloning https://github.com/fontforge/fontforge.git
Updating /Library/Caches/Homebrew/fontforge-dc--git
==> ./autogen.sh
==> ./configure --disable-freetype-debugger
==> make
/bin/sh /private/tmp/brew-fontforge-dc-HEAD-17Hz/config/install-sh -d . libltdl/
GEN .gitignore
cp ./libltdl/argz_.h libltdl/argz.h-t
mv libltdl/argz.h-t libltdl/argz.h
GEN .gitignore
GEN .gitignore
/usr/bin/make all-recursive
Making all in inc
GEN .gitignore
/usr/bin/make all-am
make[3]: Nothing to be done for `all-am'.
Making all in Unicode
CC libgunicode_la-ArabicForms.lo
CC libgunicode_la-alphabet.lo
CC libgunicode_la-backtrns.lo
CC libgunicode_la-char.lo
CC libgunicode_la-cjk.lo
CC libgunicode_la-memory.lo
CC libgunicode_la-ucharmap.lo
CC libgunicode_la-unialt.lo
CC libgunicode_la-ustring.lo
CC libgunicode_la-utype.lo
CC libgunicode_la-usprintf.lo
CC libgunicode_la-gwwiconv.lo
GEN .gitignore
CCLD libgunicode.la
/usr/bin/ranlib: file: .libs/libgunicode.a(libgunicode_la-gwwiconv.o) has no symbols
ranlib: file: .libs/libgunicode.a(libgunicode_la-gwwiconv.o) has no symbols
Making all in gutils
CC libgutils_la-divisors.lo
CC libgutils_la-fsys.lo
CC libgutils_la-gcol.lo
CC libgutils_la-gimage.lo
CC libgutils_la-gimageread.lo
CC libgutils_la-gimagereadbmp.lo
CC libgutils_la-gimagereadgif.lo
CC libgutils_la-gimagereadjpeg.lo
CC libgutils_la-gimagereadpng.lo
CC libgutils_la-gimagereadras.lo
CC libgutils_la-gimagereadrgb.lo
CC libgutils_la-gimagereadtiff.lo
CC libgutils_la-gimagereadxbm.lo
CC libgutils_la-gimagereadxpm.lo
CC libgutils_la-gimagewritebmp.lo
CC libgutils_la-gimagewritegimage.lo
CC libgutils_la-gimagewritejpeg.lo
CC libgutils_la-gimagewritepng.lo
CC libgutils_la-gimagewritexbm.lo
CC libgutils_la-gimagewritexpm.lo
CC libgutils_la-gwwintl.lo
CC libgutils_la-gio.lo
CC libgutils_la-giofile.lo
CC libgutils_la-giohosts.lo
CC libgutils_la-giomime.lo
CC libgutils_la-giothread.lo
CC libgutils_la-giotrans.lo
CC libgioftp_la-gioftp.lo
GEN .gitignore
CCLD libgioftp.la
CCLD libgutils.la
Making all in gdraw
CC libgdraw_la-choosericons.lo
CC libgdraw_la-ctlvalues.lo
CC libgdraw_la-drawboxborder.lo
CC libgdraw_la-gaskdlg.lo
CC libgdraw_la-gbuttons.lo
CC libgdraw_la-gchardlg.lo
CC libgdraw_la-gcontainer.lo
CC libgdraw_la-gcolor.lo
CC libgdraw_la-gdraw.lo
CC libgdraw_la-gdrawbuildchars.lo
CC libgdraw_la-gdrawerror.lo
CC libgdraw_la-gdrawtxt.lo
CC libgdraw_la-gdrawtxtinit.lo
CC libgdraw_la-gfilechooser.lo
CC libgdraw_la-gfiledlg.lo
CC libgdraw_la-ggadgets.lo
CC libgdraw_la-ggroupbox.lo
CC libgdraw_la-gimageclut.lo
CC libgdraw_la-gimagecvt.lo
CC libgdraw_la-gimagepsdraw.lo
CC libgdraw_la-gimagewriteeps.lo
CC libgdraw_la-gdrawgimage.lo
CC libgdraw_la-gimagexdraw.lo
CC libgdraw_la-gkeysym.lo
CC libgdraw_la-glist.lo
CC libgdraw_la-gmenu.lo
CC libgdraw_la-gprogress.lo
CC libgdraw_la-gpsdraw.lo
CC libgdraw_la-gpstxtinit.lo
CC libgdraw_la-gradio.lo
CC libgdraw_la-gresource.lo
CC libgdraw_la-gresourceimage.lo
CC libgdraw_la-gresedit.lo
CC libgdraw_la-gsavefiledlg.lo
CC libgdraw_la-gscrollbar.lo
CC libgdraw_la-gtabset.lo
CC libgdraw_la-gtextfield.lo
CC libgdraw_la-gtextinfo.lo
CC libgdraw_la-gwidgets.lo
CC libgdraw_la-gxdraw.lo
CC libgdraw_la-gxcdraw.lo
CC libgdraw_la-ghvbox.lo
CC libgdraw_la-gmatrixedit.lo
CC libgdraw_la-gdrawable.lo
CC libgdraw_la-gspacer.lo
CC libgdraw_la-xkeysyms_unicode.lo
GEN .gitignore
CCLD libgdraw.la
Making all in plugins
GEN .gitignore
Making all in fontforge
GEN .gitignore
Making all in pixmaps
GEN .gitignore
CC libfontforge_la-asmfpst.lo
CC libfontforge_la-autohint.lo
CC libfontforge_la-autosave.lo
CC libfontforge_la-autotrace.lo
CC libfontforge_la-autowidth.lo
CC libfontforge_la-bezctx_ff.lo
CC libfontforge_la-bitmapchar.lo
CC libfontforge_la-bitmapcontrol.lo
CC libfontforge_la-bvedit.lo
CC libfontforge_la-clipnoui.lo
CC libfontforge_la-crctab.lo
CC libfontforge_la-cvexport.lo
CC libfontforge_la-cvimages.lo
CC libfontforge_la-cvundoes.lo
CC libfontforge_la-dumpbdf.lo
CC libfontforge_la-dumppfa.lo
CC libfontforge_la-effects.lo
CC libfontforge_la-encoding.lo
CC libfontforge_la-featurefile.lo
CC libfontforge_la-fontviewbase.lo
CC libfontforge_la-freetype.lo
CC libfontforge_la-fvcomposite.lo
CC libfontforge_la-fvfonts.lo
CC libfontforge_la-fvimportbdf.lo
CC libfontforge_la-fvmetrics.lo
CC libfontforge_la-glyphcomp.lo
CC libfontforge_la-http.lo
CC libfontforge_la-ikarus.lo
CC libfontforge_la-lookups.lo
CC libfontforge_la-macbinary.lo
CC libfontforge_la-macenc.lo
CC libfontforge_la-mathconstants.lo
CC libfontforge_la-mm.lo
CC libfontforge_la-namelist.lo
CC libfontforge_la-nonlineartrans.lo
CC libfontforge_la-noprefs.lo
CC libfontforge_la-nouiutil.lo
CC libfontforge_la-nowakowskittfinstr.lo
CC libfontforge_la-ofl.lo
CC libfontforge_la-othersubrs.lo
CC libfontforge_la-palmfonts.lo
CC libfontforge_la-parsepdf.lo
CC libfontforge_la-parsepfa.lo
CC libfontforge_la-parsettfatt.lo
CC libfontforge_la-parsettfbmf.lo
CC libfontforge_la-parsettf.lo
CC libfontforge_la-parsettfvar.lo
CC libfontforge_la-plugins.lo
CC libfontforge_la-print.lo
CC libfontforge_la-psread.lo
CC libfontforge_la-pua.lo
CC libfontforge_la-python.lo
CC libfontforge_la-savefont.lo
CC libfontforge_la-scripting.lo
CC libfontforge_la-scstyles.lo
CC libfontforge_la-search.lo
CC libfontforge_la-sfd1.lo
CC libfontforge_la-sfd.lo
CC libfontforge_la-sflayout.lo
CC libfontforge_la-spiro.lo
CC libfontforge_la-splinechar.lo
CC libfontforge_la-splinefill.lo
CC libfontforge_la-splinefont.lo
CC libfontforge_la-splineorder2.lo
CC libfontforge_la-splineoverlap.lo
CC libfontforge_la-splinesaveafm.lo
CC libfontforge_la-splinesave.lo
CC libfontforge_la-splinestroke.lo
CC libfontforge_la-splineutil2.lo
CC libfontforge_la-splineutil.lo
CC libfontforge_la-start.lo
CC libfontforge_la-stemdb.lo
CC libfontforge_la-svg.lo
CC libfontforge_la-tottfaat.lo
CC libfontforge_la-tottfgpos.lo
CC libfontforge_la-tottf.lo
CC libfontforge_la-tottfvar.lo
CC libfontforge_la-ttfinstrs.lo
CC libfontforge_la-ttfspecial.lo
CC libfontforge_la-ufo.lo
CC libfontforge_la-unicoderange.lo
CC libfontforge_la-utils.lo
CC libfontforge_la-winfonts.lo
CC libfontforge_la-zapfnomen.lo
CC libfontforge_la-groups.lo
CC libfontforge_la-langfreq.lo
CC libfontforge_la-ftdelta.lo
CC libfontforge_la-autowidth2.lo
CC libfontforge_la-woff.lo
CC libfontforge_la-stamp.lo
CC libfontforge_la-activeinui.lo
CC libfontforge_la-pluginloading.lo
CC libfontforge_la-is_LIGATURE.lo
CC libfontforge_la-flaglist.lo
/usr/local/Library/ENV/4.3/sed -e '1,$ s/REPLACE_ME_WITH_MAJOR_VERSION/2/'
-e '1,$ s/REPLACE_ME_WITH_MINOR_VERSION/0/'
< libstamp.pre > libstamp.c
/bin/sh ../libtool --mode=compile cc -g -DHAVE_CONFIG_H -c -o
splinerefigure.lo "-I../inc" "-I../inc" "-DSHAREDIR="/usr/local/Cellar/fontforge-dc/HEAD/share/fontforge"" "-DDOCDIR="/usr/local/Cellar/fontforge-dc/HEAD/share/doc/fontforge"" "-DPLUGINDIR="/usr/local/Cellar/fontforge-dc/HEAD/lib/fontforge/plugins"" -Wunused -Wreturn-type -Wparentheses -Wformat -Wchar-subscripts -Wno-unused-but-set-variable -Wno-unused-result -Werror=missing-prototypes -Werror=implicit -I/usr/local/Cellar/zlib/1.2.7/include -D_REENTRANT -I/usr/local/Cellar/pango/1.30.1/include/pango-1.0 -I/usr/local/Cellar/glib/2.32.4/include/glib-2.0 -I/usr/local/Cellar/glib/2.32.4/lib/glib-2.0/include -I/usr/local/Cellar/gettext/0.18.1.1/include -I/usr/local/Cellar/freetype/2.4.10/include/freetype2 -I/usr/local/Cellar/freetype/2.4.10/include -I/usr/local/Cellar/fontconfig/2.10.1/include -I/opt/X11/include -I/usr/local/Cellar/freetype/2.4.10/include/freetype2 -I/usr/local/Cellar/freetype/2.4.10/include -I/usr/local/Cellar/libpng/1.5.12/include/libpng15 -I/usr/include/libxml2 -D_THREAD_SAFE -pthread -I/ ./splinerefigure.c
CC libfontforgeexe_la-alignment.lo
CC libfontforgeexe_la-anchorsaway.lo
libtool: compile: cc -g -DHAVE_CONFIG_H -c -I../inc -I../inc -DSHAREDIR="/usr/local/Cellar/fontforge-dc/HEAD/share/fontforge" -DDOCDIR="/usr/local/Cellar/fontforge-dc/HEAD/share/doc/fontforge" -DPLUGINDIR="/usr/local/Cellar/fontforge-dc/HEAD/lib/fontforge/plugins" -Wunused -Wreturn-type -Wparentheses -Wformat -Wchar-subscripts -Wno-unused-but-set-variable -Wno-unused-result -Werror=missing-prototypes -Werror=implicit -I/usr/local/Cellar/zlib/1.2.7/include -D_REENTRANT -I/usr/local/Cellar/pango/1.30.1/include/pango-1.0 -I/usr/local/Cellar/glib/2.32.4/include/glib-2.0 -I/usr/local/Cellar/glib/2.32.4/lib/glib-2.0/include -I/usr/local/Cellar/gettext/0.18.1.1/include -I/usr/local/Cellar/freetype/2.4.10/include/freetype2 -I/usr/local/Cellar/freetype/2.4.10/include -I/usr/local/Cellar/fontconfig/2.10.1/include -I/opt/X11/include -I/usr/local/Cellar/freetype/2.4.10/include/freetype2 -I/usr/local/Cellar/freetype/2.4.10/include -I/usr/local/Cellar/libpng/1.5.12/include/libpng15 -I/usr/include/libxml2 -D_THREAD_SAFE -pthread -I/ ./splinerefigure.c -fno-common -DPIC -o .libs/splinerefigure.o
CC libfontforgeexe_la-autowidth2dlg.lo
CC libfontforgeexe_la-basedlg.lo
CC libfontforgeexe_la-bdfinfo.lo
libtool: compile: cc -g -DHAVE_CONFIG_H -c -I../inc -I../inc -DSHAREDIR="/usr/local/Cellar/fontforge-dc/HEAD/share/fontforge" -DDOCDIR="/usr/local/Cellar/fontforge-dc/HEAD/share/doc/fontforge" -DPLUGINDIR="/usr/local/Cellar/fontforge-dc/HEAD/lib/fontforge/plugins" -Wunused -Wreturn-type -Wparentheses -Wformat -Wchar-subscripts -Wno-unused-but-set-variable -Wno-unused-result -Werror=missing-prototypes -Werror=implicit -I/usr/local/Cellar/zlib/1.2.7/include -D_REENTRANT -I/usr/local/Cellar/pango/1.30.1/include/pango-1.0 -I/usr/local/Cellar/glib/2.32.4/include/glib-2.0 -I/usr/local/Cellar/glib/2.32.4/lib/glib-2.0/include -I/usr/local/Cellar/gettext/0.18.1.1/include -I/usr/local/Cellar/freetype/2.4.10/include/freetype2 -I/usr/local/Cellar/freetype/2.4.10/include -I/usr/local/Cellar/fontconfig/2.10.1/include -I/opt/X11/include -I/usr/local/Cellar/freetype/2.4.10/include/freetype2 -I/usr/local/Cellar/freetype/2.4.10/include -I/usr/local/Cellar/libpng/1.5.12/include/libpng15 -I/usr/include/libxml2 -D_THREAD_SAFE -pthread -I/ ./splinerefigure.c -o splinerefigure.o >/dev/null 2>&1
CC libfontforgeexe_la-bitmapdlg.lo
CC libfontforgeexe_la-bitmapview.lo
CC libfontforgeexe_la-charinfo.lo
CC libfontforgeexe_la-charview.lo
CC libfontforgeexe_la-clipui.lo
CC libfontforgeexe_la-combinations.lo
CC libfontforgeexe_la-contextchain.lo
CC libfontforgeexe_la-cursors.lo
CC libfontforgeexe_la-cvaddpoints.lo
CC libfontforgeexe_la-cvdebug.lo
CC libfontforgeexe_la-cvdgloss.lo
CC libfontforgeexe_la-cvexportdlg.lo
CC libfontforgeexe_la-cvfreehand.lo
CC libfontforgeexe_la-cvgetinfo.lo
CC libfontforgeexe_la-cvgridfit.lo
CC libfontforgeexe_la-cvhand.lo
CC libfontforgeexe_la-cvhints.lo
CC libfontforgeexe_la-cvimportdlg.lo
CC libfontforgeexe_la-cvknife.lo
CC libfontforgeexe_la-cvpalettes.lo
CC libfontforgeexe_la-cvpointer.lo
CC libfontforgeexe_la-cvruler.lo
CC libfontforgeexe_la-cvshapes.lo
CC libfontforgeexe_la-cvstroke.lo
CC libfontforgeexe_la-cvtranstools.lo
CC libfontforgeexe_la-displayfonts.lo
CC libfontforgeexe_la-effectsui.lo
CC libfontforgeexe_la-encodingui.lo
CC libfontforgeexe_la-fontinfo.lo
CC libfontforgeexe_la-fontview.lo
CC libfontforgeexe_la-freetypeui.lo
CC libfontforgeexe_la-fvfontsdlg.lo
CC libfontforgeexe_la-fvmetricsdlg.lo
CC libfontforgeexe_la-gotodlg.lo
CC libfontforgeexe_la-groupsdlg.lo
CC libfontforgeexe_la-histograms.lo
CC libfontforgeexe_la-images.lo
CC libfontforgeexe_la-kernclass.lo
CC libfontforgeexe_la-layer2layer.lo
CC libfontforgeexe_la-lookupui.lo
CC libfontforgeexe_la-macencui.lo
CC libfontforgeexe_la-math.lo
CC libfontforgeexe_la-metricsview.lo
CC libfontforgeexe_la-mmdlg.lo
CC libfontforgeexe_la-nonlineartransui.lo
CC libfontforgeexe_la-oflib.lo
CC libfontforgeexe_la-openfontdlg.lo
CC libfontforgeexe_la-prefs.lo
CC libfontforgeexe_la-problems.lo
CC libfontforgeexe_la-pythonui.lo
CC libfontforgeexe_la-savefontdlg.lo
CC libfontforgeexe_la-scriptingdlg.lo
CC libfontforgeexe_la-scstylesui.lo
CC libfontforgeexe_la-searchview.lo
CC libfontforgeexe_la-sftextfield.lo
CC libfontforgeexe_la-showatt.lo
CC libfontforgeexe_la-simplifydlg.lo
CC libfontforgeexe_la-splashimage.lo
CC libfontforgeexe_la-startui.lo
CC libfontforgeexe_la-statemachine.lo
CC libfontforgeexe_la-tilepath.lo
CC libfontforgeexe_la-transform.lo
CC libfontforgeexe_la-ttfinstrsui.lo
CC libfontforgeexe_la-uiutil.lo
CC libfontforgeexe_la-windowmenu.lo
CC libfontforgeexe_la-justifydlg.lo
CC libfontforgeexe_la-deltaui.lo
CC libfontforgeexe_la-usermenu.lo
/usr/local/Library/ENV/4.3/sed -e '1,$ s/REPLACE_ME_WITH_MAJOR_VERSION/2/'
-e '1,$ s/REPLACE_ME_WITH_MINOR_VERSION/0/'
< exelibstamp.pre > exelibstamp.c
CC fontforge-main.o
echo ""#!/usr/local/Cellar/fontforge-dc/HEAD/bin/fontforge -lang=ff"" | cat - "./fontimage.pe" > fontimage
echo ""#!/usr/local/Cellar/fontforge-dc/HEAD/bin/fontforge -lang=ff"" | cat - "./fontlint.pe" > fontlint
chmod +x fontimage
chmod +x fontlint
echo ""#!/usr/local/Cellar/fontforge-dc/HEAD/bin/fontforge -lang=ff"" | cat - "./sfddiff.pe" > sfddiff
chmod +x sfddiff
CC libfontforge_la-libstamp.lo
CC libfontforgeexe_la-exelibstamp.lo
CCLD libfontforge.la
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-autohint.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-autotrace.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-autosave.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-autowidth.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-bitmapchar.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-bitmapcontrol.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-clipnoui.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-bvedit.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-cvexport.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-cvimages.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-dumpbdf.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-effects.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-cvundoes.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-dumppfa.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-encoding.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-featurefile.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-fontviewbase.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-freetype.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-fvcomposite.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-fvfonts.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-fvmetrics.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-fvimportbdf.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-ikarus.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-glyphcomp.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-macbinary.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-http.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-lookups.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-mathconstants.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-macenc.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-nonlineartrans.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-mm.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-noprefs.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-nouiutil.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-ofl.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-nowakowskittfinstr.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-othersubrs.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-palmfonts.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-parsepdf.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-parsepfa.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-parsettfbmf.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-parsettfatt.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-parsettfvar.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-namelist.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-plugins.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-parsettf.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-print.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-python.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-psread.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-savefont.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-search.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-sfd1.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-sflayout.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-scstyles.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-scripting.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-spiro.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-sfd.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splinefill.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splinechar.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splinefont.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splineorder2.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splineoverlap.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splinesaveafm.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splinesave.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splinestroke.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splineutil2.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-splineutil.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-start.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-tottfaat.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-stemdb.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-svg.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-tottfgpos.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-tottf.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-tottfvar.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-utils.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-ttfspecial.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-ttfinstrs.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-ufo.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-winfonts.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-unicoderange.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-groups.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-autowidth2.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-ftdelta.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-activeinui.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-langfreq.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-woff.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/libfontforge_la-libstamp.o
duplicate symbol _grad_stops in:
.libs/libfontforge_la-asmfpst.o
.libs/splinerefigure.o
ld: 87 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [libfontforge.la] Error 1
make[2]: *** [all-recursive] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

foreign function interfaces via C++ and SWIG

For future reference:

I think a much better and more reliable Python interface can be achieved, and with much less difficulty, by writing C++ bindings for libfontforge and then using SWIG to generate the Python bindings. For instance, SWIG can handle exceptions for you, which probably we will never get otherwise. As a side benefit, you could get Python 3 without (much) special code, because SWIG generates interoperable code. You could also maybe get Perl and Guile this way, without a lot of extra work.

SWIG supports OCaml, too, but I do not like the bindings it creates.

Creating foreign function bindings for libfontforge is not foreign [sic] to me; I have done much of it already for Pure. C++ could be the one language, besides Objective C/C++ and one or two others, for which it would be easier to do than for Pure. :)

Generate font subsets

Feature request - When generating a font from File->Generate Fonts... it would be a helpful feature to be able to generate the font in subsets, based on fontforge's unicode encoding sets.

This could be set up / enabled at 'Generate Fonts...' and / or from the 'Font Info' tables.

So, for example, a font that contains characters from ISO 8859-1 Latin, ISO 8859-5 Cyrillic, and ISO-8859-2 Latin, should be able to generate 3 subset fonts; named for example 'Latin', 'Latin-2', and 'Cyrillic'.

Ensure the layers palette layout code is robust

In #71 @khaledhosny said 'the new layers palette seems has its share of small annoyances (the + - buttons often just disappear, does not always grow to show all the layers, other stuff that I don’t recall right now).'

The layers palette should be worked on so that all these things are robust :)

FontForge won't compile with new build system

@chemoelectric the build system fails at 'make install' - it appears to not populate PO files, have an unterminated substitute in a regular expression, and other things shown in https://gist.github.com/3735807

@khaledhosny a fontforge executable compiles, but it gives lots of errors like

(process:5632): Pango-CRITICAL **: void pango_fontset_foreach(PangoFontset *, PangoFontsetForeachFunc, gpointer): assertion `PANGO_IS_FONTSET (fontset)' failed

and then segfaults, also shown in https://gist.github.com/3735807

timezone use not portable

In cvexport.c the following code:

#ifdef _NO_TZSET
fprintf( pdf, "Z)\n" );
#else
tzset();
if ( timezone==0 )
fprintf( pdf, "Z)\n" );
else 
fprintf( pdf, "%+02d')\n", (int) timezone/3600 ); /* doesn't handle half-hour zones */
#endif

Assumes that a system that has tzset() has the global timezone as an integer value. In fact on FreeBSD (10) there is tzset but timezone is a function returning char * for the timezone abbreviation.

Perhaps new autotools changes will address this.

Hand tool should update ruler positions

When using the hand tool to scrob around the Glyph window, the ruler positions are not updated, but zooming in and then out will update them. The ruler positions should be updated in real time.

Website to help understand build system error messages

On Fedora, if libtool-ltdl-devel isn't installed, the build system error is just

ERROR: libtoolize failed

This could be more informative, like

ERROR: libtoolize failed. Please install all of libtool. This may be packaged as libtool-ltdl-devel

Bounds checking not done on all layers

When bounds are found, not all layers are considered.
In the View->Fit function this results in different behavior depending on the shape of the Fore layer or other layers, whose dimensions are ignored even if they are active.
In the preview function, if freetype is not used, rendering is also corrupted in that only the parts of an active layer that fit in the bounds of the Fore layer are rendered properly and the parts that fall outside the boundaries on just the X axis are rendered shifted inside the boundaries. This last may be a separate issue with the built-in renderer.

Possibility of setting different values for different platforms in sfnt_names

Having the option of setting the platform_id as a fourth value (optional) in sfnt_names as in the following example:

('English (US)', 'Family', 'MyFamily') 
#for specific platforms, optional parameter
('English (US)', 'SubFamily', 'Regular', FF_PLATFORM_MAC)
('English (US)', 'SubFamily', 'MyFamily-Regular', FF_PLATFORM_PC)

Altough I know its considered non-standard by Fontforge, it is often needed and would be nice to have a streamlined workflow without the need of post processing font files in other application.

Crash when exposing layers

This crash seems to be repeatable by creating a type3 multi-layer font, creating a new layer on a glyph, and clicking on the Guide entry in the "Layers" window. I don't know why creating a new layer helps cause the crash.

In:

static void CVExpose(CharView *cv, GWindow pixmap, GEvent *event )

at charview.c : 2482 we get:

if ( layer<0 ) /* Guide lines are special */
    CVDrawLayerSplineSet(cv,pixmap,cv->b.layerheads[cv->b.drawmode],foreoutlinecol,
            cv->showpoints ,&clip,strokeFillMode);
else if ( (cv->showback[layer>>5]&(1<<(layer&31))) ||
        (!cv->show_ft_results && cv->dv==NULL )) {
    for ( rf=cv->b.sc->layers[layer].refs; rf!=NULL; rf = rf->next ) {
        if ( cv->showrefnames )
            CVDrawRefName(cv,pixmap,rf,0);
        enum outlinesfm_flags refsfm = sfm_stroke;
        if( shouldShowFilledUsingCairo(cv) ) {
            refsfm = sfm_fill;
        }
        for ( rlayer=0; rlayer<rf->layer_cnt; ++rlayer )
            CVDrawSplineSetSpecialized(cv,pixmap,rf->layers[rlayer].splines,foreoutlinecol,-1,&clip, refsfm);
        if ( rf->selected && cv->b.layerheads[cv->b.drawmode]==&cv->b.sc->layers[layer])
            CVDrawBB(cv,pixmap,&rf->bb);
    }
}
CVDrawLayerSplineSet(cv,pixmap,&cv->b.sc->layers[layer],foreoutlinecol,
                     cv->showpoints ,&clip,strokeFillMode);

if ( cv->freehand.current_trace!=NULL )
    CVDrawSplineSet(cv,pixmap,cv->freehand.current_trace,tracecol,
            false,&clip);

At the last CVDrawLayerSplineSet( ) "layer" can still be -1. When &cv->b.sc->layers[-1] is referenced in CVDrawLayerSplineSet() bad things happen.

Cannot be executed after installed

Latest master branch compiled on Ubuntu 12.04

Got error

fontforge: symbol lookup error: /usr/local/lib/libfontforgeexe-2.0.0-beta1.so: undefined symbol: source_version_str

But my program linking with libfontforge.so works well.

In build docs, note to use absolute paths

It seems enabling freetype prevents FF from compiling :(

[dcrossland@fedora fontforge]$ ./configure --enable-freetype-debugger=../freetype2

...

configure:

Summary of optional features:

  real (floating pt) double
  programs           yes
  native scripting   yes
  python scripting   yes
  python extension   yes
  freetype debugger  ../freetype2
  capslock for alt   no
  raw points mode    no
  tile path          no
  gb12345 encoding   no

Summary of optional dependencies:

  cairo              yes      http://www.cairographics.org/
  freetype           yes      http://www.freetype.org/
  giflib             yes      http://giflib.sourceforge.net/
  libjpeg            yes      http://en.wikipedia.org/wiki/Libjpeg
  libpng             yes      http://www.libpng.org/
  libtiff            yes      http://en.wikipedia.org/wiki/Libtiff
  libxml             yes      http://www.xmlsoft.org/
  libspiro           yes      http://libspiro.sourceforge.net/
  libunicodenames    no      https://github.com/chemoelectric/libunicodenames
  X Window System    yes

[dcrossland@fedora fontforge]$ make
...
  CC     libfontforge_la-freetype.lo
In file included from freetype.c:28:0:
fffreetype.h:39:33: fatal error: internal/internal.h: No such file or directory
compilation terminated.
make[3]: *** [libfontforge_la-freetype.lo] Error 1
make[3]: Leaving directory `/home/dcrossland/src/fontforge/fontforge'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/dcrossland/src/fontforge/fontforge'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/dcrossland/src/fontforge'
make: *** [all] Error 2
[dcrossland@fedora fontforge]$

Char View pixel size could be customized

CView currently has a limited set of sizes that are hard coded that must be access via menu options.

Add a toolbar to the CV window (along the bottom) with 2 buttons to make the cell px size larger or smaller, and a dropdown to select what label type to use.

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.