ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Aditya Mahajan <adityam@umich.edu>
Subject: Re: counting the words in a TeX document
Date: Mon, 7 Aug 2006 20:49:27 -0400 (EDT)	[thread overview]
Message-ID: <Pine.WNT.4.63.0608072040390.3468@nqvgln> (raw)
In-Reply-To: <6faad9f00608071431v3a097f38u86534b806896a996@mail.gmail.com>

On Mon, 7 Aug 2006, Mojca Miklavec wrote:

> On 8/7/06, Hans Hagen wrote:
>>
>>> (I'll spare you the fun with sections for some other time,) but since
>>> you reminded me that I might have some questions left, here you have
>>> another one: how do I replace hyphens, en-dashes and em-dashes with
>>> "spaces/line breaks"?
>>>        \catcode`~=13\let~=\space
>>> does what I want, but none of the following works:
>>>        \def\-{\space}
>>>        \def-{\space}
>>>        \let\-=\space
>>>
>> \catcode`-=\active \def-{ }
>
> I tried that one already, but it didn't work. Now I figured out that
> it was because of nesting the definitions (perhaps even some
> interference with negative numbers?), not because of wrong definition
> on itself.
>
> I'm sorry.
>
> Mojca
>
> (But my fear is that the whole problem is too complex anyway (tables,
> ...) to be solved elegantly.)

You should not be writing tables in abstracts!

Here is my attempt. Seems to work correctly for simple text, 
references, simple markup etc. Try anything too fancy and you are in 
trouble. I changed the name to start stop stats, as I was mistyping 
startstatistics :-).

\starttext

\bgroup

\catcode`~=\active
\catcode`-=\active

\gdef\ignorestats%
   {% treat non-breakable space as a normal one
     \catcode`~=\active
     \let~=\space
     % treat endash, emdash and - as normal space
     \catcode`-=\active
     \def-{ }
     %\setupframed[align=normal]%Frames do not work correctly
   }

\gdef\startdostats%
   {\bgroup
     \setbox0\vbox\bgroup  % \tracingall -)
     \forgetall \nohyphens \hsize1mm}


\gdef\stopdostats%
    {\egroup
     \newcounter\NOfLines
     \dontcomplain %Why do I still get overfull \hbox warnings
     \beginshapebox \unvcopy0 \endshapebox
     \reshapebox{\doglobal\increment\NOfLines}
     \getnoflines{\ht0}
     \unvbox0 %Uncomment for debug
     \par lines: \the\noflines\space
     words: \NOfLines\par\egroup}

\long\gdef\startstats#1\stopstats%
   {\bgroup\ignorestats
   \startdostats\scantokens{#1}\stopdostats\egroup}

\egroup

\def\ShowStats#1{\hairline#1\par\startstats#1\stopstats}

\ShowStats{abc~def ghi-jkl -- mno --- prs}

\ShowStats{abc-def -- ghi --- jkl}

\ShowStats{a, b}

\section[a]{one}

\ShowStats{We do some great things in \in{section}[a]}
% I do not know the internals, but section 1 seems unbreakable

\ShowStats{$a=b$} %What did you expect? It may be possible to treat
                   %each math token as mathord and allow it to break
                   %but that will not give any better results.

\startbuffer
This is a test
\stopbuffer
\ShowStats{\getbuffer}

\ShowStats{\startformula a = b + c \stopformula}

\ShowStats{\framed{This is a test}}

\ShowStats{\starthiding Another test \stophiding Does this work?}
% Buffers do not work and fail silently.

\ShowStats{This is {\bf Bold} and {\it Italic}}

\ShowStats{\input tufte}



\stoptext


Aditya

  reply	other threads:[~2006-08-08  0:49 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-05 16:45 Mojca Miklavec
2006-08-05 17:02 ` Aditya Mahajan
2006-08-05 17:52 ` gnwiii
2006-08-05 20:07 ` Hans Hagen
2006-08-06  0:31   ` Mojca Miklavec
2006-08-06 15:00     ` Hans Hagen
2006-08-06 17:27     ` Aditya Mahajan
2006-08-07  8:24       ` Mojca Miklavec
2006-08-07  9:22         ` Hans Hagen
2006-08-07 18:54           ` Mojca Miklavec
2006-08-07 20:55             ` Hans Hagen
2006-08-07 21:31               ` Mojca Miklavec
2006-08-08  0:49                 ` Aditya Mahajan [this message]
2006-08-08  7:54                 ` Hans Hagen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.WNT.4.63.0608072040390.3468@nqvgln \
    --to=adityam@umich.edu \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).