% \iffalse meta-comment % % Copyright (C) 2009-2013 by Elie Roux % and Khaled Hosny % (Support: .) % % This work is under the CC0 license. % % This work consists of the main source file luaotfload.dtx % and the derived files % luaotfload.sty, luaotfload.lua % % Unpacking: % tex luaotfload.dtx % % Documentation: % pdflatex luaotfload.dtx % % The class ltxdoc loads the configuration file ltxdoc.cfg % if available. Here you can specify further options, e.g. % use A4 as paper format: % \PassOptionsToClass{a4paper}{article} % % % %<*ignore> \begingroup \def\x{LaTeX2e}% \expandafter\endgroup \ifcase 0\ifx\install y1\fi\expandafter \ifx\csname processbatchFile\endcsname\relax\else1\fi \ifx\fmtname\x\else 1\fi\relax \else\csname fi\endcsname % %<*install> \input docstrip.tex \Msg{************************************************************************} \Msg{* Installation} \Msg{* Package: luaotfload v1.29 OpenType layout system} \Msg{************************************************************************} \keepsilent \askforoverwritefalse \let\MetaPrefix\relax \preamble This is a generated file. Copyright (C) 2009-2013 by by Elie Roux and Khaled Hosny (Support: .) This work is under the CC0 license. This work consists of the main source file luaotfload.dtx and the derived files luaotfload.sty, luaotfload.lua \endpreamble \let\MetaPrefix\DoubleperCent \generate{% \usedir{tex/luatex/luaodfload}% \file{luaotfload.sty}{\from{luaotfload.dtx}{package}}% } % The following hacks are to generate a lua file with lua comments starting by % -- instead of %% \def\MetaPrefix{-- } \def\luapostamble{% \MetaPrefix^^J% \MetaPrefix\space End of File `\outFileName'.% } \def\currentpostamble{\luapostamble}% \generate{% \usedir{tex/luatex/luaotfload}% \file{luaotfload.lua}{\from{luaotfload.dtx}{lua}}%% } \obeyspaces \Msg{************************************************************************} \Msg{*} \Msg{* To finish the installation you have to move the following} \Msg{* files into a directory searched by TeX:} \Msg{*} \Msg{* luaotfload.sty, luaotfload.lua} \Msg{*} \Msg{* Happy TeXing!} \Msg{*} \Msg{************************************************************************} \endbatchfile % %<*ignore> \fi % %<*driver> \NeedsTeXFormat{LaTeX2e} \ProvidesFile{luaotfload.drv}% [2013/04/25 v1.29 OpenType layout system]% \documentclass{ltxdoc} \usepackage{metalogo,multicol,mdwlist,fancyvrb,xcolor,xspace} \usepackage[ bookmarks=true, colorlinks=true, linkcolor=niceblue, % urlcolor=niceblue, citecolor=niceblue, pdftitle={The luaotfload package}, pdfsubject={OpenType layout system for Plain TeX and LaTeX}, pdfauthor={Elie Roux & Khaled Hosny}, pdfkeywords={luatex, lualatex, unicode, opentype} ]{hyperref} \usepackage{fontspec} \usepackage{unicode-math} \setmainfont[Ligatures=TeX]{Linux Libertine O} \setsansfont[Ligatures=TeX]{Linux Biolinum O} \setmathfont{XITS Math} \definecolor{niceblue}{rgb}{0.4,0.6,1.000} \newcommand\tex {\TeX\xspace} \newcommand\pdftex {PDF\TeX\xspace} \newcommand\luatex {Lua\TeX\xspace} \newcommand\xetex {\XeTeX\xspace} \newcommand\latex {\LaTeX\xspace} \newcommand\context{Con\TeX t\xspace} \newcommand*\email[1]{\href{mailto:#1}{#1}} \EnableCrossrefs \CodelineIndex \VerbatimFootnotes \begin{document} \DocInput{luaotfload.dtx}% \end{document} % % \fi % % \CheckSum{0} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \GetFileInfo{luaotfload.drv} % % \title{The \textsf{luaotfload} package} % \date{2013/04/25 v1.29} % \author{Elie Roux and Khaled Hosny\\ % Support: \email{lualatex-dev@tug.org}} % % \maketitle % % \begin{abstract} % This package is an adaptation of the \context font loading system, % providing the ability to load \textsf{OpenType} fonts with extended font % loading syntax supporting a large selection of OpenType font features. % \end{abstract} % % \tableofcontents % % \section{Introduction} % % Font management and installation has always been painful with \tex. % A lot of files are needed for one font (tfm, pfb, map, fd, vf), and as % \tex is 8-bit each font is limited to 256 characters. % But the font world has evolved since \tex, and new font technologies have % appeared, most notably the so called \emph{smart font} technologies like % \textsf{OpenType} fonts. These fonts can contain a lot of characters, and % additional functionalities like ligatures, old-style numbers, small capitals, % etc., and support more complex writing systems like Arabic and % Indic\footnote{Unfortunately, \textsf{luaotfload} doesn't support Indic % scripts right now} scripts. % They are widely deployed and available for all modern operating systems and % are becoming the de facto standard fonts for advanced text layout. % Until now the only way to use them directly in the \tex world was by using % them with \xetex. % % Unlike \xetex, \luatex does not provide direct support for using these fonts % by default, but it provides a way to hook Lua code in some points of the % \tex processing; for instance, we can improve the font loading system, and % text procession, which what this package is about. % % \section{Loading fonts} % % \textsf{luaotfload} supports an extended font loading syntax which looks % like: % % \begin{center} % |\font\foo={|\meta{prefix}|:|\meta{font name}|:|\meta{font features}|}| \meta{\tex font features} % \end{center} % % \noindent % The curly brackets are optional and are used for escaping spaces in font % names (double quotes can also used for the same purpose). % % \paragraph{Prefix} % % The \meta{prefix} be either |file:| or |name:|, which specify % whether to use a select the font from its filename or font name, % respectively. If no prefix is specified, then |file:| is assumed. % % For compatibility with \xetex, surrounding the \meta{font name} % with square brackets is synonymous to using the |file:| prefix. % % Accessing fonts by fontname allows loading system installed fonts as well as % \textsc{texmf} ones, and requires a font names database; see % Section~\ref{sec:fontdb} for more information. % % \paragraph{Font name} % % The \meta{font name} can be either a font filename or actual font name % based on the \meta{prefix} as mentioned above. % % Fonts loaded by filename may either include their absolute path in the % filesystem or consist of just the filename with a path. % If no path is specified then \textsf{kpathsea} is used to locate the font % (which will typically be in the \textsc{texmf} tree or the current % directory). % % For example, % \begin{quote} % \begin{verbatim} % \font\1={file:ec-lmr10} at 10pt % \font\2={/Users/Shared/Fonts/aldus.otf} at 11pt % \font\3={name:TeX Gyre Pagella} at 9pt % \end{verbatim} % \end{quote} % % % \paragraph{Font features} % % \meta{font features} are a list of items separated by semi-colons, % which are either % |key=value| font parameters, or switches to enable/disable certain font % features in the form of |+feat|/|-feat|. % The supported keys are: % \begin{description} % \item [mode] \hfill \\ % \textsf{luaotfload} has two OpenType processing modes; |base| and |node|. % |base| mode works by mapping OpenType features to traditional \tex ligature % and kerning mechanisms, thus supporting only non-contextual substitutions and % kerning pairs, but is slightly faster. |node| works by direct processing of % the node list at Lua end and have more wide support of OpenType features but % can be slow especially with complex fonts and can't be used in math mode. % % By default |node| mode is used, and you have to manually force |base| mode % when needed e.g. for math fonts. % % \item [script] \hfill \\ % OpenType script string, default value is |dflt|. Some fonts don't assign % features to the |dflt| script, in which case the script need to be set % explicitly. % % \item [language] \hfill \\ % OpenType language string, default value is |latn|. % % \item [featurefile] \hfill \\ % feature files are textual representation of OpenType tables and can be used to % extend OpenType features of the font on fly. The file name of the feature file % is passed, then features defined in the file can be enabled/disabled like any % other feature. The syntax is documented in Adobe's % \href{http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html}{OpenType Feature File Specification}. % % For example, to set a |tkrn| feature from |mykern.fea| file: % % |\font\lmr=Latin Modern Roman:featurefile=mykern.fea;+tkrn| % % \item [color] \hfill \\ % font color, defined as a triplet of two-digit hexadecimal RGB values, with % optionally another value for the transparency % (where |00| is completely transparent and |FF| is opaque.) % % For example, to set text in semitransparent red: % % |\font\lmr=Latin Modern Roman:color=FF0000BB| % % \item [protrusion \& expansion] \hfill \\ % Both keys control microtypographic features of the font, namely glyph % protrusion and expansion. The value of the key is the name of predefined % Lua tables of protrusion and expansion values; see the end of % |otfl-font-dum.lua| file for an example of such tables. The only % predefined value is |default|. % % For example, to enable default protrusion\footnote{You also need to set % |\pdfprotrudechars2 \pdfadjustspacing2| to activate protrusion and expansion, % respectively. See \pdftex manual for details}: % % |\font\lmr=Latin Modern Roman:protrusion=default| % % \end{description} % % \subparagraph{Non-standard font features} % \textsf{luaotfload} defines some additional font feature not defined in % OpenType, currently three features are defined: % % \begin{itemize*} % \item |anum|: replaces European numbers with eastern Arabic numbers or % Persian numbers, depending on the value of |language|. % \item |itlc|: compute italic correction values (on by default). % \item |tlig|: applies legacy \tex ligatures (|``''-- -- !` ?` <<>>|). % \item |trep|: applies legacy \tex replacements (|`'"|). % \end{itemize*} % % (For \xetex users: these last two are the equivalent of writing % |mapping=text-tex| using \xetex's input remapping feature.) % % % \section{Font names database} % \label{sec:fontdb} % % As introduced in the previous section, \textsf{luaotfload} uses a database % to keep track of fonts available to \luatex. Using this database, fonts can % be loaded by font name as well as filename. % % When \textsf{luaotfload} is asked to load a font by font name, it will check % if font names database exists and load it, or generate a new database if non % exists. This is all done automatically without user intervention. When the % asked font is missing from the database, it will attempt to update the % database and try to find the font again, so that the user can install new % fonts without worrying about manually updating the database. % % However, it is sometimes desirable to update the database manually, so % \textsf{luaotfload} provides a |mkluatexfontdb| utility to manually update % the database. |mkluatexfontdb| is a lua script that can be either run % directly or as an argument to |texlua|, depending on your system\footnote{ % On MS Windows it can be run either by calling the wrapper application % |mkluatexfontdb.exe| or with |texlua.exe mkluatexfontdb.lua|}. % % The first time the database is generated may take quite some time to process % every font on your computer. % This is particularly noticeable if it occurs during a typesetting run. % Subsequent runs to update the database will be quite fast, however. % % \textsf{luaotfload} will parse standard places for fonts in your system to % build the font database. On Linux, it will read |fontconfig| configuration % files to find the font locations; % on Windows and Mac~OS~X, it will search in the standard font locations, % |%WINDIR%\Fonts| in Windows and |~/Library/Fonts|, |/Library/Fonts|, % |/System/Library/Fonts|, and |/Network/Library/Fonts| in Mac~OS~X. % % If you do not wish the standard font locations be searched by default but % would rather specify the exact locations in which to find your fonts, set % the |OSFONTDIR| environment variable instead. When this variable is set, % only the specified directories will be searched. % % |mkluatexfontdb.lua --help| provides a brief summary of the functionality of % the script and includes some advanced options that we have not mentioned % here. % % \subsection{Blacklisting fonts} % % Some fonts are problematic in \luatex, if you found that your document takes % too long to compile, or eats all the free memory, you can find the culprit % file by running |mkluatexfontdb| utility with |-v| option to see which font % file it is stuck with. You can then instruct \textsf{luaotfload} to ignore % this font by adding it to the blacklist configuration file. % % Simply, create a file named |otfl-blacklist.cnf| and added the to be % blacklisted files, one per line. Then put the file some where \textsf{kpse} % can find. You can either use the base name or the full path. Any thing after % a |%| sign is ignored. % % \section{Required \context files} % % This package is a wrapper for several files taken from the \context macro % package. The philosophy is to let \context do all the implementation and % update these files from time to time. So we try not to modify the files % taken from \context as far as possible, but we changed their names to % prevent name clashes. % % The \context files are renamed by adding the prefix |otfl-| to them % (|otfl| as |OTF L|oad). The files are: % % \begin{multicols}{3} % \begin{itemize*} % \item |luat-dum.lua| % \item |data-con.lua| % \item |node-inj.lua| % \item |node-dum.lua| % \item |font-ini.lua| % \item |font-tfm.lua| % \item |font-cid.lua| % \item |font-ott.lua| % \item |font-otf.lua| % \item |font-otd.lua| % \item |font-oti.lua| % \item |font-otb.lua| % \item |font-otn.lua| % \item |font-ota.lua| % \item |font-otc.lua| % \item |font-def.lua| % \item |font-xtx.lua| % \item |font-map.lua| % \item |font-dum.lua| % \end{itemize*} % \end{multicols} % % The following files have been written for this package: % \begin{multicols}{3} % \begin{itemize*} % \item |font-clr.lua| % \item |font-nms.lua| % \item |luat-ovr.lua| % \end{itemize*} % \end{multicols} % % \section{Troubleshooting} % % If you encounter problems with some fonts, please first update to the latest % version of this package before reporting a bug, as this package is under % active development. % % A very common problem is the lack of features for some OpenType fonts % even when specified. It can be related to the fact that some fonts do not % provide features for the |dflt| script, which is the default one in this % package, so you may have to specify the script in the command line, for % example: % % |\font\myfont = MyFont.otf:script=latn;+liga;| % % \part{\texttt{luaotfload.lua}} % % \iffalse %<*lua> % \fi % % First some usual initializations. % % \begin{macrocode} module("luaotfload", package.seeall) luaotfload.module = { name = "luaotfload", version = 1.29, date = "2013/04/25", description = "OpenType layout system.", author = "Elie Roux & Hans Hagen", copyright = "Elie Roux", license = "CC0" } local error, warning, info, log = luatexbase.provides_module(luaotfload.module) % \end{macrocode} % % This is a necessary initalization in order not to rebuild an existing font. % Maybe 600 should be replaced by |\pdfpkresolution| or |texconfig.pk_dpi| % (and it should be replaced dynamically), but we don't have access (yet) to % the |texconfig| table, so we let it be 600. Anyway, it does still work % fine even if |\pdfpkresolution| is changed. % % \begin{macrocode} kpse.init_prog("", 600, "/") % \end{macrocode} % % The minimal required \luatex version. % % \begin{macrocode} local luatex_version = 60 if tex.luatexversion < luatex_version then warning("LuaTeX v%.2f is old, v%.2f is recommended.", tex.luatexversion/100, luatex_version /100) end % \end{macrocode} % % \subsection{Module loading} % % We load the \context files with this function. It automatically adds the % |otfl-| prefix to it, so that we call it with the actual \context % name. % % \begin{macrocode} function luaotfload.loadmodule(name) local tofind = "otfl-"..name local found = kpse.find_file(tofind,"tex") if found then log("loading file %s.", found) dofile(found) else error("file %s not found.", tofind) end end % \end{macrocode} % % We start loading some lua files. These two are some code not used by % \context at all that allow other modules to be used, it provides some % low-level \context functions. % % \begin{macrocode} luaotfload.loadmodule("luat-dum.lua") -- not used in context at all luaotfload.loadmodule("luat-ovr.lua") -- override some luat-dum functions luaotfload.loadmodule("data-con.lua") -- maybe some day we don't need this one % \end{macrocode} % % A hack to remove a warning from |node-dum.lua| as it is \context % specific. % % \begin{macrocode} tex.attribute[0] = 0 % \end{macrocode} % % Node support modules. % % \begin{macrocode} luaotfload.loadmodule("font-ini.lua") luaotfload.loadmodule("node-dum.lua") luaotfload.loadmodule("node-inj.lua") % \end{macrocode} % % By default \context takes some private attributes for internal use. To % avoide attribute clashes with other packages, we override the function % that allocates new attributes, making it a wraper around % |luatexbase.new_attribute()|. We also prefix attributes with |otfl@| to % avoid possiple name clashes. % % \begin{macrocode} function attributes.private(name) local attr = "otfl@" .. name local number = luatexbase.attributes[attr] if not number then number = luatexbase.new_attribute(attr) end return number end % \end{macrocode} % % Font handling modules. % % \begin{macrocode} luaotfload.loadmodule("font-tfm.lua") luaotfload.loadmodule("font-cid.lua") luaotfload.loadmodule("font-ott.lua") luaotfload.loadmodule("font-map.lua") luaotfload.loadmodule("font-otf.lua") luaotfload.loadmodule("font-otd.lua") luaotfload.loadmodule("font-oti.lua") luaotfload.loadmodule("font-otb.lua") luaotfload.loadmodule("font-otn.lua") luaotfload.loadmodule("font-ota.lua") luaotfload.loadmodule("font-otc.lua") luaotfload.loadmodule("font-def.lua") luaotfload.loadmodule("font-xtx.lua") luaotfload.loadmodule("font-dum.lua") % \end{macrocode} % % This is a patch for |otfl-font-def.lua|, that defines a reader for ofm % fonts, this is necessary if we set the forced field of the specification % to |ofm|. % % \begin{macrocode} if fonts and fonts.tfm and fonts.tfm.readers then fonts.tfm.readers.ofm = fonts.tfm.readers.tfm end % \end{macrocode} % % \textsf{luaotfload} specific modules. % % \begin{macrocode} luaotfload.loadmodule("font-nms.lua") luaotfload.loadmodule("font-clr.lua") % \end{macrocode} % % \subsection{Post-processing TFM table} % % Here we do some final touches to the loaded TFM table before passing it % to the \tex end. % % First we create a callback for patching fonts on the fly, to be used by % other packages. % \begin{macrocode} luatexbase.create_callback("luaotfload.patch_font", "simple", function() end) % \end{macrocode} % % then define a function where font manipulation will take place. % % \begin{macrocode} local function def_font(...) local fontdata = fonts.define.read(...) if type(fontdata) == "table" and fontdata.shared then % \end{macrocode} % % Then we populate |MathConstants| table, which is required for % OpenType math. % % \begin{macrocode} local otfdata = fontdata.shared.otfdata if otfdata.metadata.math then local mc = { } for k,v in next, otfdata.metadata.math do if k:find("Percent") then -- keep percent values as is mc[k] = v else mc[k] = v / fontdata.units * fontdata.size end end -- for \overwithdelims mc.FractionDelimiterSize = 1.01 * fontdata.size mc.FractionDelimiterDisplayStyleSize = 2.39 * fontdata.size fontdata.MathConstants = mc end % \end{macrocode} % % Execute any registered font patching callbacks. % % \begin{macrocode} luatexbase.call_callback("luaotfload.patch_font", fontdata) end return fontdata end % \end{macrocode} % % \subsection{\context override} % % We have a unified function for both file and name resolver. This line is % commented as it makes database reload too often. This means that in some % cases, a font in the database will not be found if it's not in the texmf % tree. A similar thing will reappear in next version. % % \begin{macrocode} --fonts.define.resolvers.file = fonts.define.resolvers.name % \end{macrocode} % % Overriding some defaults set in \context code. % % \begin{macrocode} fonts.mode = "node" % \end{macrocode} % % The following features are useful in math (e.g. in XITS Math font), % but \textsf{luaotfload} does not recognize them in |base| mode. % % \begin{macrocode} local register_base_sub = fonts.otf.features.register_base_substitution local gsubs = { "ss01", "ss02", "ss03", "ss04", "ss05", "ss06", "ss07", "ss08", "ss09", "ss10", "ss11", "ss12", "ss13", "ss14", "ss15", "ss16", "ss17", "ss18", "ss19", "ss20", } for _,v in next, gsubs do register_base_sub(v) end % \end{macrocode} % % Finally we register the callbacks % % \begin{macrocode} luatexbase.add_to_callback("pre_linebreak_filter", nodes.simple_font_handler, "luaotfload.pre_linebreak_filter") luatexbase.add_to_callback("hpack_filter", nodes.simple_font_handler, "luaotfload.hpack_filter") luatexbase.reset_callback("define_font") luatexbase.add_to_callback("define_font", def_font, "luaotfload.define_font", 1) luatexbase.add_to_callback("find_vf_file", fonts.vf.find, "luaotfload.find_vf_file") % \end{macrocode} % XXX: see https://github.com/wspr/unicode-math/issues/185 % % \luatex does not provide interface to accessing % |(Script)ScriptPercentScaleDown| math constants, so we % emulate \xetex behaviour by setting |\fontdimen10| and % |\fontdimen11|. % % \begin{macrocode} local function set_sscale_diments(fontdata) local mc = fontdata.MathConstants if mc then if mc["ScriptPercentScaleDown"] then fontdata.parameters[10] = mc.ScriptPercentScaleDown else -- resort to plain TeX default fontdata.parameters[10] = 70 end if mc["ScriptScriptPercentScaleDown"] then fontdata.parameters[11] = mc.ScriptScriptPercentScaleDown else -- resort to plain TeX default fontdata.parameters[11] = 50 end end end luatexbase.add_to_callback("luaotfload.patch_font", set_sscale_diments, "unicodemath.set_sscale_diments") % \end{macrocode} % % \iffalse % % \fi % % \part{\texttt{luaotfload.sty}} % % \iffalse %<*package> % \fi % % Classical Plain+\latex package initialization. % % \begin{macrocode} \csname ifluaotfloadloaded\endcsname \let\ifluaotfloadloaded\endinput \bgroup\expandafter\expandafter\expandafter\egroup \expandafter\ifx\csname ProvidesPackage\endcsname\relax \input luatexbase.sty \else \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{luaotfload}% [2012/05/28 v1.27 OpenType layout system] \RequirePackage{luatexbase} \fi \RequireLuaModule{lualibs} % \end{macrocode} % % Finally we load the |lua| module. % % \begin{macrocode} \RequireLuaModule{luaotfload} % \end{macrocode} % \iffalse % % \fi % % \clearpage % \section{The GNU GPL License v2} % % The GPL requires the complete license text to be distributed along % with the code. I recommend the canonical source, instead: % \url{http://www.gnu.org/licenses/old-licenses/gpl-2.0.html}. % But if you insist on an included copy, here it is. % You might want to zoom in. % % \newsavebox{\gpl} % \begin{lrbox}{\gpl} % \begin{minipage}{3\textwidth} % \columnsep=3\columnsep % \begin{multicols}{3} % \begin{center} % {\Large GNU GENERAL PUBLIC LICENSE\par} % \bigskip % {Version 2, June 1991} % \end{center} % % \begin{center} % {\parindent 0in % % Copyright \textcopyright\ 1989, 1991 Free Software Foundation, Inc. % % \bigskip % % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA % % \bigskip % % Everyone is permitted to copy and distribute verbatim copies % of this license document, but changing it is not allowed. % } % \end{center} % % \begin{center} % {\bf\large Preamble} % \end{center} % % % The licenses for most software are designed to take away your freedom to % share and change it. By contrast, the GNU General Public License is % intended to guarantee your freedom to share and change free software---to % make sure the software is free for all its users. This General Public % License applies to most of the Free Software Foundation's software and to % any other program whose authors commit to using it. (Some other Free % Software Foundation software is covered by the GNU Library General Public % License instead.) You can apply it to your programs, too. % % When we speak of free software, we are referring to freedom, not price. % Our General Public Licenses are designed to make sure that you have the % freedom to distribute copies of free software (and charge for this service % if you wish), that you receive source code or can get it if you want it, % that you can change the software or use pieces of it in new free programs; % and that you know you can do these things. % % To protect your rights, we need to make restrictions that forbid anyone to % deny you these rights or to ask you to surrender the rights. These % restrictions translate to certain responsibilities for you if you % distribute copies of the software, or if you modify it. % % For example, if you distribute copies of such a program, whether gratis or % for a fee, you must give the recipients all the rights that you have. You % must make sure that they, too, receive or can get the source code. And % you must show them these terms so they know their rights. % % We protect your rights with two steps: (1) copyright the software, and (2) % offer you this license which gives you legal permission to copy, % distribute and/or modify the software. % % Also, for each author's protection and ours, we want to make certain that % everyone understands that there is no warranty for this free software. If % the software is modified by someone else and passed on, we want its % recipients to know that what they have is not the original, so that any % problems introduced by others will not reflect on the original authors' % reputations. % % Finally, any free program is threatened constantly by software patents. % We wish to avoid the danger that redistributors of a free program will % individually obtain patent licenses, in effect making the program % proprietary. To prevent this, we have made it clear that any patent must % be licensed for everyone's free use or not licensed at all. % % The precise terms and conditions for copying, distribution and % modification follow. % % \begin{center} % {\Large \sc Terms and Conditions For Copying, Distribution and % Modification} % \end{center} % % \begin{enumerate} % \item % This License applies to any program or other work which contains a notice % placed by the copyright holder saying it may be distributed under the % terms of this General Public License. The ``Program'', below, refers to % any such program or work, and a ``work based on the Program'' means either % the Program or any derivative work under copyright law: that is to say, a % work containing the Program or a portion of it, either verbatim or with % modifications and/or translated into another language. (Hereinafter, % translation is included without limitation in the term ``modification''.) % Each licensee is addressed as ``you''. % % Activities other than copying, distribution and modification are not % covered by this License; they are outside its scope. The act of % running the Program is not restricted, and the output from the Program % is covered only if its contents constitute a work based on the % Program (independent of having been made by running the Program). % Whether that is true depends on what the Program does. % % \item You may copy and distribute verbatim copies of the Program's source % code as you receive it, in any medium, provided that you conspicuously % and appropriately publish on each copy an appropriate copyright notice % and disclaimer of warranty; keep intact all the notices that refer to % this License and to the absence of any warranty; and give any other % recipients of the Program a copy of this License along with the Program. % % You may charge a fee for the physical act of transferring a copy, and you % may at your option offer warranty protection in exchange for a fee. % % \item % You may modify your copy or copies of the Program or any portion % of it, thus forming a work based on the Program, and copy and % distribute such modifications or work under the terms of Section 1 % above, provided that you also meet all of these conditions: % % \begin{enumerate} % % \item % You must cause the modified files to carry prominent notices stating that % you changed the files and the date of any change. % % \item % You must cause any work that you distribute or publish, that in % whole or in part contains or is derived from the Program or any % part thereof, to be licensed as a whole at no charge to all third % parties under the terms of this License. % % \item % If the modified program normally reads commands interactively % when run, you must cause it, when started running for such % interactive use in the most ordinary way, to print or display an % announcement including an appropriate copyright notice and a % notice that there is no warranty (or else, saying that you provide % a warranty) and that users may redistribute the program under % these conditions, and telling the user how to view a copy of this % License. (Exception: if the Program itself is interactive but % does not normally print such an announcement, your work based on % the Program is not required to print an announcement.) % % \end{enumerate} % % % These requirements apply to the modified work as a whole. If % identifiable sections of that work are not derived from the Program, % and can be reasonably considered independent and separate works in % themselves, then this License, and its terms, do not apply to those % sections when you distribute them as separate works. But when you % distribute the same sections as part of a whole which is a work based % on the Program, the distribution of the whole must be on the terms of % this License, whose permissions for other licensees extend to the % entire whole, and thus to each and every part regardless of who wrote it. % % Thus, it is not the intent of this section to claim rights or contest % your rights to work written entirely by you; rather, the intent is to % exercise the right to control the distribution of derivative or % collective works based on the Program. % % In addition, mere aggregation of another work not based on the Program % with the Program (or with a work based on the Program) on a volume of % a storage or distribution medium does not bring the other work under % the scope of this License. % % \item % You may copy and distribute the Program (or a work based on it, % under Section 2) in object code or executable form under the terms of % Sections 1 and 2 above provided that you also do one of the following: % % \begin{enumerate} % % \item % % Accompany it with the complete corresponding machine-readable % source code, which must be distributed under the terms of Sections % 1 and 2 above on a medium customarily used for software interchange; or, % % \item % % Accompany it with a written offer, valid for at least three % years, to give any third party, for a charge no more than your % cost of physically performing source distribution, a complete % machine-readable copy of the corresponding source code, to be % distributed under the terms of Sections 1 and 2 above on a medium % customarily used for software interchange; or, % % \item % % Accompany it with the information you received as to the offer % to distribute corresponding source code. (This alternative is % allowed only for noncommercial distribution and only if you % received the program in object code or executable form with such % an offer, in accord with Subsection b above.) % % \end{enumerate} % % % The source code for a work means the preferred form of the work for % making modifications to it. For an executable work, complete source % code means all the source code for all modules it contains, plus any % associated interface definition files, plus the scripts used to % control compilation and installation of the executable. However, as a % special exception, the source code distributed need not include % anything that is normally distributed (in either source or binary % form) with the major components (compiler, kernel, and so on) of the % operating system on which the executable runs, unless that component % itself accompanies the executable. % % If distribution of executable or object code is made by offering % access to copy from a designated place, then offering equivalent % access to copy the source code from the same place counts as % distribution of the source code, even though third parties are not % compelled to copy the source along with the object code. % % \item % You may not copy, modify, sublicense, or distribute the Program % except as expressly provided under this License. Any attempt % otherwise to copy, modify, sublicense or distribute the Program is % void, and will automatically terminate your rights under this License. % However, parties who have received copies, or rights, from you under % this License will not have their licenses terminated so long as such % parties remain in full compliance. % % \item % You are not required to accept this License, since you have not % signed it. However, nothing else grants you permission to modify or % distribute the Program or its derivative works. These actions are % prohibited by law if you do not accept this License. Therefore, by % modifying or distributing the Program (or any work based on the % Program), you indicate your acceptance of this License to do so, and % all its terms and conditions for copying, distributing or modifying % the Program or works based on it. % % \item % Each time you redistribute the Program (or any work based on the % Program), the recipient automatically receives a license from the % original licensor to copy, distribute or modify the Program subject to % these terms and conditions. You may not impose any further % restrictions on the recipients' exercise of the rights granted herein. % You are not responsible for enforcing compliance by third parties to % this License. % % \item % If, as a consequence of a court judgment or allegation of patent % infringement or for any other reason (not limited to patent issues), % conditions are imposed on you (whether by court order, agreement or % otherwise) that contradict the conditions of this License, they do not % excuse you from the conditions of this License. If you cannot % distribute so as to satisfy simultaneously your obligations under this % License and any other pertinent obligations, then as a consequence you % may not distribute the Program at all. For example, if a patent % license would not permit royalty-free redistribution of the Program by % all those who receive copies directly or indirectly through you, then % the only way you could satisfy both it and this License would be to % refrain entirely from distribution of the Program. % % If any portion of this section is held invalid or unenforceable under % any particular circumstance, the balance of the section is intended to % apply and the section as a whole is intended to apply in other % circumstances. % % It is not the purpose of this section to induce you to infringe any % patents or other property right claims or to contest validity of any % such claims; this section has the sole purpose of protecting the % integrity of the free software distribution system, which is % implemented by public license practices. Many people have made % generous contributions to the wide range of software distributed % through that system in reliance on consistent application of that % system; it is up to the author/donor to decide if he or she is willing % to distribute software through any other system and a licensee cannot % impose that choice. % % This section is intended to make thoroughly clear what is believed to % be a consequence of the rest of this License. % % \item % If the distribution and/or use of the Program is restricted in % certain countries either by patents or by copyrighted interfaces, the % original copyright holder who places the Program under this License % may add an explicit geographical distribution limitation excluding % those countries, so that distribution is permitted only in or among % countries not thus excluded. In such case, this License incorporates % the limitation as if written in the body of this License. % % \item % The Free Software Foundation may publish revised and/or new versions % of the General Public License from time to time. Such new versions will % be similar in spirit to the present version, but may differ in detail to % address new problems or concerns. % % Each version is given a distinguishing version number. If the Program % specifies a version number of this License which applies to it and ``any % later version'', you have the option of following the terms and conditions % either of that version or of any later version published by the Free % Software Foundation. If the Program does not specify a version number of % this License, you may choose any version ever published by the Free Software % Foundation. % % \item % If you wish to incorporate parts of the Program into other free % programs whose distribution conditions are different, write to the author % to ask for permission. For software which is copyrighted by the Free % Software Foundation, write to the Free Software Foundation; we sometimes % make exceptions for this. Our decision will be guided by the two goals % of preserving the free status of all derivatives of our free software and % of promoting the sharing and reuse of software generally. % % \begin{center} % {\Large\sc % No Warranty % } % \end{center} % % \item % {\sc Because the program is licensed free of charge, there is no warranty % for the program, to the extent permitted by applicable law. Except when % otherwise stated in writing the copyright holders and/or other parties % provide the program ``as is'' without warranty of any kind, either expressed % or implied, including, but not limited to, the implied warranties of % merchantability and fitness for a particular purpose. The entire risk as % to the quality and performance of the program is with you. Should the % program prove defective, you assume the cost of all necessary servicing, % repair or correction.} % % \item % {\sc In no event unless required by applicable law or agreed to in writing % will any copyright holder, or any other party who may modify and/or % redistribute the program as permitted above, be liable to you for damages, % including any general, special, incidental or consequential damages arising % out of the use or inability to use the program (including but not limited % to loss of data or data being rendered inaccurate or losses sustained by % you or third parties or a failure of the program to operate with any other % programs), even if such holder or other party has been advised of the % possibility of such damages.} % % \end{enumerate} % % % \begin{center} % {\Large\sc End of Terms and Conditions} % \end{center} % % % \pagebreak[2] % % \section*{Appendix: How to Apply These Terms to Your New Programs} % % If you develop a new program, and you want it to be of the greatest % possible use to the public, the best way to achieve this is to make it % free software which everyone can redistribute and change under these % terms. % % To do so, attach the following notices to the program. It is safest to % attach them to the start of each source file to most effectively convey % the exclusion of warranty; and each file should have at least the % ``copyright'' line and a pointer to where the full notice is found. % % \begin{quote} % one line to give the program's name and a brief idea of what it does. \\ % Copyright (C) yyyy name of author \\ % % This program 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 program 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 program; if not, write to the Free Software % Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. % \end{quote} % % Also add information on how to contact you by electronic and paper mail. % % If the program is interactive, make it output a short notice like this % when it starts in an interactive mode: % % \begin{quote} % Gnomovision version 69, Copyright (C) yyyy name of author \\ % Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. \\ % This is free software, and you are welcome to redistribute it % under certain conditions; type `show c' for details. % \end{quote} % % % The hypothetical commands {\tt show w} and {\tt show c} should show the % appropriate parts of the General Public License. Of course, the commands % you use may be called something other than {\tt show w} and {\tt show c}; % they could even be mouse-clicks or menu items---whatever suits your % program. % % You should also get your employer (if you work as a programmer) or your % school, if any, to sign a ``copyright disclaimer'' for the program, if % necessary. Here is a sample; alter the names: % % \begin{quote} % Yoyodyne, Inc., hereby disclaims all copyright interest in the program \\ % `Gnomovision' (which makes passes at compilers) written by James Hacker. \\ % % signature of Ty Coon, 1 April 1989 \\ % Ty Coon, President of Vice % \end{quote} % % % This General Public License does not permit incorporating your program % into proprietary programs. If your program is a subroutine library, you % may consider it more useful to permit linking proprietary applications % with the library. If this is what you want to do, use the GNU Library % General Public License instead of this License. % % \end{multicols} % \end{minipage} % \end{lrbox} % % \begin{center} % \scalebox{0.33}{\usebox{\gpl}} % \end{center} % % \Finale \endinput