Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

==============================================================================
END LICENSE


Docgen subcomponents with different copyright owners
----------------------------------------------------

The "icomoon" font files (icomoon.eot, icomoon.svg, icomoon.ttf, and
icomoon.woff), which are part of Docgen both in its source and binary form
(and of the output it generates), contains a selection from the following
fonts:

* Entypo pictograms, version 2.0, by Daniel Bruce (www.entypo.com).
  Each included pictogram is either licensed under Creative
  Commons Attribution-ShareAlike 3.0 (CC BY-SA 3.0)
  (http://creativecommons.org/licenses/by-sa/3.0/legalcode), or
  under SIL Open Font License 1.1 (http://scripts.sil.org/OFL).

* Font Awesome by Dave Gandy (http://fontawesome.io), licensed under
  SIL Open Font License 1.1 (http://scripts.sil.org/OFL).
  
* Material Design icons by Google
  (http://google.github.io/material-design-icons/), licensed under
  Creative Common Attribution 4.0 International License (CC-BY 4.0)
  (https://creativecommons.org/licenses/by/4.0/).