diff options
author | Karl Berry <karl@freefriends.org> | 2010-04-05 23:24:55 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-04-05 23:24:55 +0000 |
commit | c8341d201aa8f8dfccefe14289a4c9031ae066e4 (patch) | |
tree | 7db3e7ff43954af7b8ef72053236f10dcb5df41b /Master/texmf-dist/tex/latex/nicetext/wiki.sty | |
parent | 90664c2e19fef7f53b58df6203416e812e98661d (diff) |
nicetext update (5apr10)
git-svn-id: svn://tug.org/texlive/trunk@17725 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/nicetext/wiki.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/nicetext/wiki.sty | 376 |
1 files changed, 376 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/nicetext/wiki.sty b/Master/texmf-dist/tex/latex/nicetext/wiki.sty new file mode 100644 index 00000000000..6fe7b4e4b46 --- /dev/null +++ b/Master/texmf-dist/tex/latex/nicetext/wiki.sty @@ -0,0 +1,376 @@ +\ProvidesPackage{wiki}[2008/07/02 v0.2 LaTeX through Wiki markup] +%% <- vorige Aenderungen gg. 2008/06/25 verworfen +%% +%% == Legal == +%% (C) 2008 Uwe Lueck http://contact-ednotes.sty.de.vu +%% License: http://www.latex-project.org/lppl/ +%% -- AUTHOR-MAINTAINED, NO WARRANTY! +%% +%% == Features == +%% +%% The `wiki' package enables LaTeX users to use some of the +%% markup used in editing Wikipedia pages, cf. +%% +%% http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet +%% +%% or German: +%% +%% http://de.wikipedia.org/wiki/Hilfe:Bearbeitungshilfe +%% http://de.wikipedia.org/wiki/Hilfe:Textgestaltung +%% +%% Advantages of such a kind of markup are: +%% +%% 1. easier and faster to type than LaTeX code; +%% +%% 2. intuitive, understandable at a glance; +%% +%% 3. in reading the source code of the document, +%% the markup doesn't much distract from the ''text'' +%% to be printed. +%% +%% There is a binary `easylatex' available on CTAN which is more +%% powerful than the `wiki' package; the idea here is that a ''macro +%% package'' doing something similar is easier to use and to customize. +%% +%% +%% === What the Package Supports === +%% +%% 1. ''Italics'' are marked up by surrounding pairs of apostrophes, +%% '''boldface''' needs one apostrophe more on each side. +%% Boldface and italics may be nested or overlap. +%% (This endangers quoting, but I have dealt with it.) +%% +%% 2. Surrounding ``equals'' symbols (`=') mark up section headings +%% etc.: `== Section ==', `=== Subsection ===', down to +%% `===== Subparagraph ====='. +%% +%% 3. If a line starts with `*', it becomes an item in an +%% `itemize' environment. Likewise, `#' creates an `enumerate' +%% environment, and `;' makes an item in a `discription' +%% environment (differs from Wiki! -- since I don't understand +%% what the Wiki version is good for). `:' makes a `quote' -- +%% while on Wikipedia instead is used for comments on talk +%% pages. But it is also used for indented math displays, +%% so it may be combined with $...$ here. +%% An indented line is typeset ''verbatim''. Each of these +%% environments is ended by a code line without leading blank +%% spaces. +%% +%% +%% === Limitations === +%% +%% 1. The markup ``language'' provided here replaces a few most +%% common LaTeX commands only in their most simple versions. +%% (Yet I think that already this makes the code more readable; +%% the more special cases are very rare.) E.g., it's not +%% possible to suppress the italic correction as with +%% `\textit{...\nocorr}'. However, in ``normal'' cases it +%% should be possible to use the more powerful LaTeX markup +%% mixed with ``Wiki'' markup. +%% +%% 2. The parsing algorithms employed here differ in outcome to +%% those of Wikipedia in difficult cases. +%% +%% 3. Tables, nesting lists, links, Wiki templates and tags +%% are not supported -- and I don't expect that I can afford +%% improving this soon! +%% +%% 4. I still have encountered problems that I didn't understand ... +%% +%% == Package Options and User Commands == +%% +%% \usepackage[<options>]{wiki}, of course. There are <options> +%% `noEnvironments', `noFonts', `noHeadings' giving up +%% functionality for lists etc., for italics and boldface, +%% for section headings etc., respectively. +%% +%% There are commands \wikimarkup, \wikiEnvironments, +%% \wikiFonts, \wikiHeadings to turn respective functionality on +%% (unless disabled by package option). \nowikimarkup, +%% \nowikiEnvironments, \nowikiFonts, \nowikiHeadings turn them +%% off. +%% +%% '''Vital:''' The package does ''not'' execute \wikimarkup +%% because this would have strange effects, e.g., packages +%% loaded later may break. The user must put activating +%% commands into the `document' environment, maybe just preceding +%% the first heading. +%% +%% Dangers to be avoided by \nowiki... are: +%% * \wikiHeadings (which also is executed by \wikimarkup) +%% disables TeX assignments using `='. +%% * \wikiEnvironments (executed by \wikimarkup) executes macros +%% at every end of a code line (containing no comment marke), +%% and it tries to typeset a following line verbatim if it is +%% indented. +%% +%% +%% == Implementation and Further Remarks == + +%% === Commands for Category Codes === +% \RequirePackage{fdcodes} + %% <- TODO -- or do away ... -> +\providecommand*\AssignCatCode[2]{\catcode`#1=#2\relax} +\providecommand*\MakeActive[1]{\catcode`#1=\active} +% \providecommand*\MakeLetter[1]{\catcode`#1=11\relax} + %% <- Declaring characters usable in command strings + %% Todo: print arrow indicators like ``->'' as real arrows +\providecommand*\MakeOther [1]{\catcode`#1=12\relax} + +\AssignCatCode{\_}{11} +% \MakeLetter\_ %% own macros somewhat LaTeX3-style +%% Todo \newcommand <-> \def !? + +%% === Package Options === +\DeclareOption{noFonts} {\let\wikiFonts \empty + \let\nowikiFonts \relax} +\DeclareOption{noHeadings} {\let\wikiHeadings \empty + \let\nowikiHeadings \relax} +\DeclareOption{noEnvironments}{\let\wikiEnvironments \empty + \let\nowikiEnvironments\relax} +\DeclareOption{noVerbatim}{% + \def\W_active_return{ \futurelet\@let@token\W_on_firsttoken}} + %% \[no]wikiVerbatim must wait, too complex 2008/07/01 +\ProcessOptions + +%% === Auxiliaries for both Fonts and Headings === + + \@tempswafalse + \ifx\wikiFonts \empty \else \@tempswatrue \fi + \ifx\wikiHeadings\empty \else \@tempswatrue \fi + \if@tempswa +\def\W_start_samecnt{\futurelet\@let@token\W_process_samecnt} +\def\W_init_samecnt#1#2#3{% + \let\W_samesymb =#1%% repeated symbol + \def\W_repllist {#2}% replacing strings + \def\W_incase_all{#3}% final replacement + \def\W_next##1{\W_start_samecnt}} +\def\W_process_samecnt{% + \expandafter \W_splitlist \W_repllist \@nil + \W_next} +\def\W_splitlist#1#2\@nil{% + \def\W_repllist{#2}% + \ifx\@let@token\W_samesymb + \ifx\W_repllist\empty \def\W_next##1{\W_incase_all}\fi + \else + \def\W_next{#1}% + \fi} + \fi + +%% === Italics and Boldface === + +%% ==== Code ==== + \ifx\wikiFonts\empty \else +\def\W_toggle#1#2#3{\def#1{\W_toggle#1{#3}{#2}}#2} +%% Cf. LaTeX's `\DeclareTextFontCommand': +\def\W_bf_toggle{% + \W_toggle\W_bf_toggle{\bfseries\W_maybe@ic}{\mdseries\W_maybe@ic}} +\def\W_maybe@ic{\futurelet\@let@token\W_maybe_maybe@ic} +\def\W_maybe_maybe@ic{% + \ifx\@let@token\W_rq_robust \else \expandafter \maybe@ic \fi} +\def\W_it_toggle{% + \W_toggle\W_it_toggle{\itshape\maybe@ic}{\upshape\maybe@ic}} +%% <- Doesn't support \nocorr. + +\def\W_rq_robust{%% will become meaning of single right quote. + \ifx\protect\@typeset@protect + \ifmmode \rq \else + \W_init_samecnt{\W_rq_robust}% + {\rq\W_it_toggle}% + {\W_bf_toggle}% + \expandafter\expandafter\expandafter \W_start_samecnt + \fi + \else \rq \fi} +%% Remark: +%% LaTeX's \rq expands to ``other'' apostrophe: +\CheckCommand*\rq{'} %% Must be before `\catcode`\' +%% \wikiFonts -- restoring `...' and ``...'' -- + \nowikiFonts: +%% requiring single left quote \active as well: +\CheckCommand*{\lq}{`} +\MakeActive\`\MakeActive\' +\def\wikiFonts{% + \MakeActive\`\MakeActive\'% + \def`##1'{\lq ##1\rq}% + \let'\W_rq_robust} +\def\nowikiFonts{\MakeOther`\MakeOther\'} +\MakeOther\` \MakeOther\' + \fi + +%% ==== Remarks ==== +%% Wiki: a''b'''cd typesets `b' in italic with an apostrophe, +%% a''b'''c'''d typsets all after `a' in italic with bold `b'. +%% One might use make a difference depending on \lastskip. +%% Wikimedia seems to read more ahead, maybe entire paragraphs. +%% %% <- Todo: try here!? (Test!) +%% +%% Todo: Variants using \textit and \textbf (option, switching +%% command) +%% +%% german.sty's "` and "' are not affected. +%% +%% Merit: ``...'' resembles ''...''; indeed Wikipedia Guidelines +%% demand to think which of both is appropriate in a +%% certain situation. + +%% A test about \ifx with active characters: +%\catcode`\`=\active \let`\rq \let'\rq +%\ifx`'\typeout{OHHH}\else \typeout{OCH}\fi %% OHHH +%% <- how typeset code commented out!? (^!? diff. comment char.!?) +%% indent %! TODO or no space after %!! TODO!! +%% xEDIT: dann Alt C/D fuer Kommentar/Dok./auskomm. (!?) !! + +%% === Section Headings === + + \ifx\wikiHeadings\empty \else +\providecommand*{\normalequals}{=} +\MakeActive\= +\def\wikiHeadings{\MakeActive\=\let=\W_eq_robust} +\def\nowikiHeadings{\MakeOther\=} +\def\W_eq_robust{% + \ifx\protect\@typeset@protect + %% in case without math mode in heading + \ifmmode \normalequals \else + \W_init_samecnt{\W_eq_robust}% + {\normalequals\W_sec\W_subsec\W_subsubsec + \W_para\W_subpara}% + {\W_bf_toggle}% + \expandafter\expandafter\expandafter \W_start_samecnt + \fi + \else \normalequals \fi} + +\def\W_sec #1=={\section{#1}} +\def\W_subsec #1==={\subsection{#1}} +\def\W_subsubsec #1===={\subsubsection{#1}} +\def\W_para #1====={\paragraph{#1}} +\def\W_subpara #1======{\subparagraph{#1}} + +\MakeOther\= + \fi + +%% Todo: think of reimplementation by the start-line +%% mechanism which is going to be used for lists. + +%% === Environments === +%% + \ifx\wikiEnvironments\empty \else + +%% ==== Prepare Dealing with Indents ==== + +\MakeActive{\^^M}% +\def\wikiEnvironments{\MakeActive{\^^M}\let^^M\W_active_return}% +\def\nowikiEnvironments{\AssignCatCode{\^^M}{5}}% +\nowikiEnvironments%% TeX <return> restored + +\MakeActive{\ }% +\@ifundefined{W_active_return}{% +\expandafter\def\expandafter\W_active_return\expandafter{% +\space\catcode`\ \active\let \W_indent% +%% <- \W_indent will start verbatim +\futurelet\@let@token\W_on_firsttoken}% +}{}%% end of \@ifundefined which is true without noVerbatim +%% Much doubling for saving time (!??): +\expandafter\def\expandafter\W_list_activereturn\expandafter{% +\space\catcode`\ \active\let \W_restore_space% +%% <- \W_indent will start verbatim +\futurelet\@let@token\W_maybe_newitem}% +% \def\W_restore_space{\catcode`\ 10\relax}% + %% <- was vital for a math display in a list -> +\def\W_restore_space{\catcode`\ 10\ignorespaces}% +\W_restore_space%% TeX blank space restored + +%% ==== Start and End List-Like Environments ==== + +%% \W_on_firsttoken may be edited (preamble or .cfg): +\def\W_on_firsttoken{% + % \show\@let@token + \W_restore_space + \let\W_next\relax %% must be before \W_skip... works + \ifx\@let@token\W_active_return \expandafter \W_par \fi + %% <- found by guessing/with \show\@let@token + \let\W_item\item + \W_on_startenv{*}{itemize}% + \W_on_startenv{\W_hash}{enumerate}% + \W_on_startenv{;}{description}% + \let\W_item\relax %% must precede `quote' + \W_on_startenv{:}{quote}%% instead of quotation 2008/07/01 + \W_next} +\let\W_hash=# +\def\W_par#1\W_next{\par} +\def\W_skiprest_item#1\W_next#2{\W_item} + +\MakeActive{\^^M}% +\def\W_on_startenv#1#2{% + \ifx#1\@let@token% + \begin{#2}% + \let\W_itemsymbol#1% + \let^^M\W_list_activereturn% + \expandafter \W_skiprest_item% + \fi}% +\nowikiEnvironments% + +\def\W_maybe_newitem{% + \W_restore_space + \ifx\@let@token\W_itemsymbol + \expandafter \W_gobbling_item + \else + \ifx\@let@token\W_restore_space + \else + \ifx\@let@token\W_list_activereturn + \par + \else + \edef\W_next{\noexpand\end{\@currenvir}}% + \W_next + \fi + \fi + \fi} +\def\W_gobbling_item#1{\item} + +%% ==== Verbatim Environment ==== + +\def\W_indent{\begin{W_verbatim}} +\def\W_verbatim{% + \let\obeylines\W_obeylines + \@verbatim \frenchspacing\@vobeyspaces} +\let\endW_verbatim\endverbatim + +\MakeActive{\^^M} +\def\W_obeylines{% + \catcode`\^^M\active% + \def^^M{\par\futurelet\@let@token\W_check_verbcont}}% +\nowikiEnvironments% + +\def\W_check_verbcont{% + \ifx\@let@token\@xobeysp + \expandafter \@gobble %% gobble one space + \else + \def\W_next{\end{W_verbatim}}% + \expandafter \W_next + \fi} + +%% TODO: enable user to switch between environment ``encodings'' +%% or to disable some of them (edit \W_on_firsttoken) + + \fi %% from \ifx\wikiEnvironments \else + + +%% === Turning Wiki Markup On and Off === + +\def\wikimarkup{\wikiFonts\wikiHeadings\wikiEnvironments} +\def\nowikimarkup{% + \MakeOther\`\MakeOther\'\MakeOther\=\AssignCatCode{\^^M}{5}} + +% \wikimarkup %% strange effects here, to be put into document + +\AssignCatCode\_{8} +\endinput + +%% todo: tables, links, templates, (pseudo-)html-tags ... +%% TODO: credits: easylatex etc. +%% TODO: useful for: ... intuitive markup, ``poor man's WYSIWYG'', +%% ASCII-WYSIWYG. +%% Todo: improve Wiki markup: ``tab'' indents instead of `:' +%% as in testing for end of list: after finding one +%% leading space, test for another. + + + |