dart-sdk/docs/language/dart.sty
eernst@google.com bf339367c3 Introduced hash valued location markers in the spec
Introduced support for adding SHA1 hash valued location markers
at several levels in the language specification, added long explanatory
comment at the end, added a script 'addlatexhash.dart' to normalize
spacing, remove comments, etc., in the spec, such that the hash values
are more robust than they would be with a direct usage of the spec.

The script passes the "dvi2tty test", that is, when the location markers
are empty, the resulting *.dvi files created from dartLangSpec.tex and
from the version processed by the script give rise to the same text via
dvi2tty, i.e., the script does not destroy the spec.

R=gbracha@google.com, ricow@google.com

Review URL: https://codereview.chromium.org//646003002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41191 260f80e4-7a28-3924-810f-c04153c831b5
2014-10-20 14:02:23 +00:00

152 lines
3.9 KiB
TeX

\def\keyword#1{\textbf{#1}}
\def\builtinId#1{\textbf{#1}}
\def\comment#1{\textit{#1}}
\def\capt#1{\rmfamily \caption{#1}}
\newcommand{\cd}[1]{\textsf{#1}}
\def\lt{$<$}
\def\gt{$>$}
\def\<{$\langle$}
\def\>{$\rangle$}
\def\ABSTRACT{\builtinId{abstract}}
\def\AS{\builtinId{as}}
\def\ASSERT{\keyword{assert}}
\def\ASYNC{\keyword{async}}
\def\AWAIT{\keyword{await}}
\def\BOOLEAN{\keyword{boolean}}
\def\BREAK{\keyword{break}}
\def\CASE{\keyword{case}}
\def\CLASS{\keyword{class}}
\def\CALL{\keyword{call}}
\def\CATCH{\keyword{catch}}
\def\CONST{\keyword{const}}
\def\CONTINUE{\keyword{continue}}
\def\DEFAULT{\keyword{default}}
\def\DEFERRED{\keyword{deferred}}
\def\DYNAMIC{\builtinId{dynamic}}
\def\DO{\keyword{do}}
\def\ELSE{\keyword{else}}
\def\ENUM{\keyword{enum}}
\def\EQUALS{\keyword{equals}}
\def\EXPORT{\builtinId{export}}
\def\EXTENDS{\keyword{extends}}
\def\EXTERNAL{\builtinId{external}}
\def\FACTORY{\builtinId{factory}}
\def\FALSE{\keyword{false}}
\def\FINAL{\keyword{final}}
\def\FINALLY{\keyword{finally}}
\def\FOR{\keyword{for}}
\def\GET{\builtinId{get}}
\def\HIDE{\keyword{hide}}
\def\IF{\keyword{if}}
\def\IMPLEMENTS{\builtinId{implements}}
\def\IMPORT{\builtinId{import}}
\def\IN{\keyword{in}}
\def\INT{\keyword{int}}
\def\INTERFACE{\keyword{interface}}
\def\IS{\keyword{is}}
\def\LIBRARY{\builtinId{library}}
\def\NATIVE{\keyword{native}}
\def\NEGATE{\keyword{negate}}
\def\NEW{\keyword{new}}
\def\NULL{\keyword{null}}
\def\ON{\keyword{on}}
\def\OF{\keyword{of}}
\def\OPERATOR{\builtinId{operator}}
\def\PART{\builtinId{part}}
\def\PRIVATE{\keyword{private}}
\def\RETHROW{\keyword{rethrow}}
\def\RETURN{\keyword{return}}
\def\SET{\builtinId{set}}
\def\SHOW{\keyword{show}}
\def\SOURCE{\keyword{source}}
\def\STATIC{\builtinId{static}}
\def\SUPER{\keyword{super}}
\def\SWITCH{\keyword{switch}}
\def\SYNC{\keyword{sync}}
\def\THIS{\keyword{this}}
\def\THROW{\keyword{throw}}
\def\TRUE{\keyword{true}}
\def\TRY{\keyword{try}}
\def\TYPEDEF{\builtinId{typedef}}
\def\THIS{\keyword{this}}
\def\VAR{\keyword{var}}
\def\VOID{\keyword{void}}
\def\WHILE{\keyword{while}}
\def\WITH{\keyword{with}}
\def\YIELD{\keyword{yield}}
% \def\PUBLIC{\keyword{public}}
%\def\PROTECTED{\keyword{protected}}
% \def\OUTER{\keyword{outer}}
\def\TRUE{\keyword{true}}
\newenvironment{Q}[1]{{\bf #1}}
\newenvironment{rationale}[1]{{\it #1}}
\newenvironment{commentary}[1]{{\sf #1}}
\newenvironment{dartCode}[1][!ht] {
% \begin{verbatim}[#1]
\def\@programcr{\@addfield\strut}
\let\\=\@programcr
\relax\@vobeyspaces\obeylines
\sffamily
}{
%\end{verbatim}
}
% ----------------------------------------------------------------------
% Support for hash valued Location Markers
% very small font, to enable 33 char hash values in the margin
\makeatletter
\ifcase \@ptsize \relax% 10pt
\newcommand{\miniscule}{\@setfontsize\miniscule{2}{3}}% \tiny: 5/6
\or% 11pt
\newcommand{\miniscule}{\@setfontsize\miniscule{3}{4}}% \tiny: 6/7
\or% 12pt
\newcommand{\miniscule}{\@setfontsize\miniscule{3}{4}}% \tiny: 6/7
\fi
\makeatother
% white: location markers should not create visual noise
\definecolor{LMdim}{gray}{1.0}
% insert location marker showing hash value of following paragraph
\newcommand{\LMHash}[1]{%
\hspace{0pt}\marginpar{\raisebox{0.5ex}{\miniscule{\color{LMdim}#1}}}}
% support convenient renewcommand
\let\OriginalLMHash\LMHash
% define a label, and show the associated logical location marker
\newcommand{\LMLabel}[1]{%
\vspace{-\baselineskip}\hspace{0pt}\OriginalLMHash{\raisebox{10ex}{sec:#1}}%
\label{#1}}
% dummy version of LMHash, always shows the same arbitrary hash value
\renewcommand{\LMHash}[1]{\OriginalLMHash{ba01b04d58c8c4e259764498f823cc65}}
% ----------------------------------------------------------------------