This package collects Thai scalable fonts available in free licenses, and
maintains and distributes them under GNU General Public License with
original authors' permissions.

Some fonts cannot be GPL, because they are based on fonts with different
licenses. See the list of such fonts at the end of this file.

Copyright:

	- Kinnari:

	Copyright (C) 1999 Db Type. All Rights Reserved.
	Copyright (C) 2007 National Electronics and Computer Technology Center.
	All Rights Reserved.

	- Garuda:

	Generated by NECTEC for Public Domain.
	Modified under GNU General Public License by TLWG.

	- Norasi:

	Copyright (C) 1999, The National Font Project (v.beta). 
	Yannis Haralambous, Virach Sornlertlamvanich and Anutara Tantraporn.
	All rights reserved.
	Modified under GNU General Public License, with creators' permission,
	by Thai Linux Working Group (TLWG).

	- Loma:

	Copyright (C) 2003, NECTEC. All rights reserved.

	- TlwgMono:

	Copyright (C) 2003 Poonlap Veerathanabutr <poonlap@linux.thai.net>

	- Tlwg Typewriter:

	Copyright (C) 2003, 2004 Poonlap Veerathanabutr <poonlap@linux.thai.net>

	- Tlwg Typist:

	Tlwg Typist, based on Poonlap Veerathanabutr's Tlwg Typewriter.

	Copyright (C) 2005-2006 Theppitak Karoonboonyanan. Tlwg Typewriter,
	Free Thai Pseudo Monospace outline font.

	Copyright (C) 2003, 2004 Poonlap Veerathanabutr <poonlap@linux.thai.net>

	- Purisa:

	Copyright (C) 2003, 2004 Poonlap Veerathanabutr 
	<poonlap@linux.thai.net>, GPL license

	- Sawasdee:

	Copyright (C) 2007 Pol Udomwittayanukul <webnaipol@gmail.com>.
	All rights reserved.

	- Umpush:

	Copyright (C) 2003 NECTEC. All rights reserved.
	Copyright (c) 2007 Widhaya Trisarnwadhana <widhaya3@gmail.com>.
	All rights reserved.

License:

	This font is free software; you can redistribute it and/or modify it
	under the terms of the GNU General Public License as published by the
	Free Software Foundation; either version 2 of the License, or (at your
	option) any later version.

	This font is distributed in the hope that it will be useful, but
	WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this font; if not, write to the Free Software Foundation,
	Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

	As a special exception, if you create a document which uses this font,
	and embed this font or unaltered portions of this font into the
	document, this font does not by itself cause the resulting document
	to be covered by the GNU General Public License. This exception does
	not however invalidate any other reasons why the document might be
	covered by the GNU General Public License. If you modify this font,
	you may extend this exception to your version of the font, but you
	are not obligated to do so. If you do not wish to do so, delete this
	exception statement from your version.

See included GPL file for the GNU General Public License (GPL) terms.


* Non-GPL Fonts:

- Waree:

Copyright:

	Copyright (C) 2003 by Bitstream, Inc. All Rights Reserved.
	TLWG changes are in public domain.

	Bitstream Vera is a trademark of Bitstream, Inc.

License:

	Permission is hereby granted, free of charge, to any person obtaining
	a copy of the fonts accompanying this license ("Fonts") and associated
	documentation files (the "Font Software"), to reproduce and distribute
	the Font Software, including without limitation the rights to use,
	copy, merge, publish, distribute, and/or sell copies of the Font
	Software, and to permit persons to whom the Font Software is furnished
	to do so, subject to the following conditions:

	The above copyright and trademark notices and this permission notice
	shall be included in all copies of one or more of the Font Software
	typefaces.

	The Font Software may be modified, altered, or added to, and in
	particular the designs of glyphs or characters in the Fonts may be
	modified and additional glyphs or characters may be added to the
	Fonts, only if the fonts are renamed to names not containing either
	the words "Bitstream" or the word "Vera".

	This License becomes null and void to the extent applicable to Fonts
	or Font Software that has been modified and is distributed under the
	"Bitstream Vera" names.

	The Font Software may be sold as part of a larger software package
	but no copy of one or more of the Font Software typefaces may be sold
	by itself.

	THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
	EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
	MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
	OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
	BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR
	OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL,
	OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR
	OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT
	SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

	Except as contained in this notice, the names of Gnome, the Gnome
	Foundation, and Bitstream Inc., shall not be used in advertising or
	otherwise to promote the sale, use or other dealings in this Font
	Software without prior written authorization from the Gnome Foundation
	or Bitstream Inc., respectively. For further information, contact:
	fonts at gnome dot org. 

