From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/100803 Path: news.gmane.org!.POSTED!not-for-mail From: Hans van der Meer Newsgroups: gmane.comp.tex.context Subject: Re: Files on a server Date: Wed, 16 May 2018 14:58:49 +0200 Message-ID: <0BE1F2BC-E49E-45F4-8055-AC8B7B9FA8F3@ziggo.nl> References: <69D183B2-1264-4399-A805-591A82569287@ziggo.nl> <866b81fb-8850-f813-fc48-ed101772028c@gmail.com> <406b185d-8476-d488-5391-c34482066a33@gmail.com> <5F79F8C0-98A4-4A7C-93F2-837257F39737@elvenkind.com> Reply-To: mailing list for ConTeXt users NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 (Mac OS X Mail 11.3 \(3445.6.18\)) Content-Type: multipart/mixed; boundary="===============3215700540645035787==" X-Trace: blaine.gmane.org 1526475435 25823 195.159.176.226 (16 May 2018 12:57:15 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 16 May 2018 12:57:15 +0000 (UTC) To: NTG ConTeXt Original-X-From: ntg-context-bounces@ntg.nl Wed May 16 14:57:11 2018 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1fIvzT-0006cs-AA for gctc-ntg-context-518@m.gmane.org; Wed, 16 May 2018 14:57:11 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id BD0ED28C9F; Wed, 16 May 2018 14:59:03 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id YfgUcKNkqsre; Wed, 16 May 2018 14:59:02 +0200 (CEST) Original-Received: from zapf.ntg.nl (localhost [IPv6:::1]) by zapf.ntg.nl (Postfix) with ESMTP id B264428C96; Wed, 16 May 2018 14:59:02 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id 8B77228C96 for ; Wed, 16 May 2018 14:59:01 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XTQBfarlBDmw for ; Wed, 16 May 2018 14:59:00 +0200 (CEST) Original-Received: from smtpq3.tb.mail.iss.as9143.net (smtpq3.tb.mail.iss.as9143.net [212.54.42.166]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id 3D26B28C94 for ; Wed, 16 May 2018 14:58:50 +0200 (CEST) Original-Received: from [212.54.42.132] (helo=smtp8.tb.mail.iss.as9143.net) by smtpq3.tb.mail.iss.as9143.net with esmtp (Exim 4.86_2) (envelope-from ) id 1fIw13-0006Wk-WC for ntg-context@ntg.nl; Wed, 16 May 2018 14:58:50 +0200 Original-Received: from 546a86c8.cm-12-3c.dynamic.ziggo.nl ([84.106.134.200] helo=[192.168.178.10]) by smtp8.tb.mail.iss.as9143.net with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.86_2) (envelope-from ) id 1fIw13-0006o0-Rg for ntg-context@ntg.nl; Wed, 16 May 2018 14:58:49 +0200 In-Reply-To: <5F79F8C0-98A4-4A7C-93F2-837257F39737@elvenkind.com> X-Mailer: Apple Mail (2.3445.6.18) X-SourceIP: 84.106.134.200 X-Authenticated-Sender: havdmeer@ziggo.nl (via SMTP) X-Ziggo-spambar: / X-Ziggo-spamscore: 0.0 X-Ziggo-spamreport: CMAE Analysis: v=2.3 cv=HMbt6Llv c=1 sm=1 tr=0 a=wCstmS+ZHA3zSJXjQC+ubA==:17 a=9+rZDBEiDlHhcck0kWbJtElFXBc=:19 a=VUJBJC2UJ8kA:10 a=-tSjNU3cAAAA:8 a=YGgp-goRAAAA:8 a=pGLkceISAAAA:8 a=UJ5Y5Z__AAAA:8 a=A1X0JdhQAAAA:8 a=MiNTnEJAAAAA:8 a=YEMqx4UAAAAA:8 a=ACQCx6kCAAAA:8 a=xtERp6CFAAAA:8 a=a3nu-2BBAAAA:8 a=AKYA7-q8O8e6YL09S-cA:9 a=Dvgsd4WUVT6QYL2v:21 a=NP2CVyXa_m1XkFX_:21 a=QEXdDO2ut3YA:10 a=l7H_-xEkOZYtJG1hD28A:9 a=hSIOZF7mdfgqUq8p:21 a=kGNco_3QEiVg7fgS:21 a=1CTAD8zlURpIGqFw:21 a=_W_S_7VecoQA:10 a=3wsV40ouLUCwv0v1nh_8:22 a=jGrNUvj8ck4JNooP3QZQ:22 a=-nuATAkMhhWPdIrRzIKU:22 a=Df3jFdWbhGDLdZNm0fyq:22 a=LmrbSfiT3hecnSZifb5M:22 a=V0662LiR8DSfwiDagK97:22 a=Sab0UneHBzlWrQDlOuxD:22 a=ekCXXmE-vB8RPiJ3MEZb:22 none X-Ziggo-Spam-Status: No X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.16 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.org gmane.comp.tex.context:100803 Archived-At: --===============3215700540645035787== Content-Type: multipart/alternative; boundary="Apple-Mail=_EC014DA8-2C78-4845-9554-9595926B6E83" --Apple-Mail=_EC014DA8-2C78-4845-9554-9595926B6E83 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Beste Taco, Ik probeer jouw oplossing maar er gebeurt nog iets raars. Ik krijg = inderdaad 200 resp. 404 terug bij bestaande niet-bestaande Uri=E2=80=99s. = Maar ik krijg wel een error die aan het eind van de run gegenereerd = wordt. Heb jij enig idee waar ik dat zou moeten zoeken? Als ik de call = naar \verbose uitschakel komt er geen foutmelding. Blijft er na de = socket call iets achter wat nog opgeruimd had moeten worden? Hier een deel van de context-log en de code fragmenten in kwestie. = is de root node van het bewerkte bestand. HVDM-PEV-TEST > return code: 200 HVDM-PEV > number of events processed: 1 HVDM-PEV > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D end of = takepersons =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D backend > xmp > using file = '/Users/hansm/TeX/context-45/tex/texmf-context/tex/context/base/mkiv/lpdf-= pdx.xml' pages > flushing realpage 1, userpage 1, subpage 1 close source > level 2, order 13, name = '/Users/hansm/Documents/Genealogie/familie-event.tex' close source > level 1, order 13, name = '/Users/hansm/TeX/context-45/tex/texmf-context/tex/context/base/mkiv/cont-= yes.mkiv' lua error > lua error on line 0 in file : ...-45/tex/texmf-context/tex/context/base/mkiv/core-uti.lua:92: attempt = to index a number value (global 'status') ?=20 Process aborted Code in tex: = \def\URIReturnCode#1{\ctxlua{tex.print(hvdm.urireturncode("#1"))}}=20 \verbose{HVDM-PEV-TEST}{return code: \URIReturnCode{\theurl}} Code in lua: hvdm.urireturncode =3D function (theuri) content, status, authinfo =3D socket.http.request{ method =3D "HEAD", url =3D theuri, } return tostring(status) end Groet Hans > On 16 May 2018, at 14:23, Taco Hoekwater wrote: >=20 >=20 > Or use luasocket, which is included in the luatex binary: >=20 > \startluacode > content, status, authinfo =3D socket.http.request{ > method =3D "HEAD", > url =3D = "http://hansvandermeer.myqnapcloud.com/archive/denhaag/hga-dtb-1869-6040.p= df=E2=80=9D=20 > } >=20 > print (status) >=20 > \stopluacode >=20 > prints =E2=80=98404=E2=80=99 in this case. >=20 > Taco >=20 >> On 16 May 2018, at 13:45, Henri Menke wrote: >>=20 >> On 05/16/2018 11:23 PM, Hans van der Meer wrote: >>> I would be satisfied when a returned 404 error code will be handled >>> within a reasonable (configurable) time delay. As for redirection, = there >>> I would not mind if it is not included. >>> Restrictions like that are not a problem for me, because this is for >>> building a pdf that accesses many internet located files. The check = on >>> existence is therefore especially meant for spotting missing or = misnamed >>> files. >>=20 >> You can use libcurl via ffi: https://curl.haxx.se/libcurl/ >>=20 >> \startluacode >> local ffi =3D require("ffi") >>=20 >> ffi.cdef[[ >> typedef struct Curl_easy CURL; >> typedef int CURLcode; >> typedef int CURLoption; >> typedef int CURLINFO; >> typedef size_t(*callback)(void *buffer, size_t size, size_t nmemb, = void >> *userp); >>=20 >> CURLcode curl_global_init(long flags); >> CURL *curl_easy_init(void); >> CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...); >> CURLcode curl_easy_perform(CURL *curl); >> CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); >> void curl_easy_cleanup(CURL *curl); >> void curl_global_cleanup(void); >> ]] >>=20 >> -- magic numbers >> local CURL_GLOBAL_DEFAULT =3D 3 >> local CURLOPT_URL =3D 10002 >> local CURLOPT_NOBODY =3D 44 >> local CURLOPT_HEADER =3D 42 >> local CURLOPT_WRITEFUNCTION =3D 20011 >> local CURLINFO_RESPONSE_CODE =3D 0x200000 + 2 >>=20 >> local lcurl =3D ffi.load("curl") >>=20 >> local function discard(buffer, size, nmemb, userp) >> return size * nmemb >> end >>=20 >> function check_status(url) >> lcurl.curl_global_init(CURL_GLOBAL_DEFAULT) >>=20 >> local curl =3D lcurl.curl_easy_init() >>=20 >> lcurl.curl_easy_setopt(curl, CURLOPT_URL, url) >> lcurl.curl_easy_setopt(curl, CURLOPT_NOBODY, ffi.cast("long",1)) >> lcurl.curl_easy_setopt(curl, CURLOPT_HEADER, ffi.cast("long",1)) >> lcurl.curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, >> ffi.cast("callback",discard)); >>=20 >> local res =3D lcurl.curl_easy_perform(curl) >> local c_http_code =3D ffi.new("long[1]") >> lcurl.curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, c_http_code); >>=20 >> lcurl.curl_easy_cleanup(curl) >> lcurl.curl_global_cleanup() >>=20 >> return tonumber(c_http_code[0]) >> end >> \stopluacode >>=20 >> \starttext >>=20 >> \ctxlua{context(check_status("http://example.com/"))} >>=20 >> \ctxlua{context(check_status("https://example.com/"))} >>=20 >> \ctxlua{context(check_status("https://example.com/xyz"))} >>=20 >> \stoptext >>=20 >>>=20 >>> Hans van der Meer >>>=20 >>>> On 16 May 2018, at 12:41, Henri Menke >>> > wrote: >>>>=20 >>>> On 05/16/2018 09:31 PM, Hans van der Meer wrote: >>>>> I tried to determine the existence of a file on the internet. See = the >>>>> following macro call: >>>>>=20 >>>>> % Test if file exists. >>>>> = \edef\theurl{\linkprotocol://\urlbase\xmlatt{#1}{link}\thesuffix} >>>>> \doiffileelse >>>>> {\theurl} >>>>> {\verbose{HVDM-PEV-TEST}{file exists: \theurl}} >>>>> {\verbose{HVDM-PEV-TEST}{file does not exist: \theurl}} >>>>>=20 >>>>> It seems that \doiffileelse always results in true except for = local >>>>> files where nonexistence is correctly handled. >>>>>=20 >>>>> For example the following url definitely does not exist but = nevertheless >>>>> \doiffileelse reports its existence: >>>>> HVDM-PEV-TEST > file exists: >>>>> = http://hansvandermeer.myqnapcloud.com/archive/denhaag/hga-dtb-1869-6040.pd= f >>>>>=20 >>>>> Is it possible that the \doiffile macros are extended for files on = the >>>>> internet or a correponding set \doifurl is developed? >>>>=20 >>>> I'm not speaking for the devs here, but I don't think that this is = going >>>> to be included. It would require that all webpages send proper 404 >>>> codes and timeout after reasonable delay. Also how would you = handle >>>> redirects? Should the ConTeXt run be stalled because checking for = a >>>> files existence on the web is caught in a redirect loop? >>>>=20 >>>>>=20 >>>>> Hans van der Meer >>>>>=20 >>>>>=20 >>>>>=20 >>>>> = __________________________________________________________________________= _________ >>>>> If your question is of interest to others as well, please add an >>>>> entry to the Wiki! >>>>>=20 >>>>> maillist : ntg-context@ntg.nl / >>>>> http://www.ntg.nl/mailman/listinfo/ntg-context >>>>> webpage : http://www.pragma-ade.nl / http://context.aanhet.net >>>>> archive : https://bitbucket.org/phg/context-mirror/commits/ >>>>> wiki : http://contextgarden.net >>>>> = __________________________________________________________________________= _________ >>>>>=20 >>>>=20 >>>> = __________________________________________________________________________= _________ >>>> If your question is of interest to others as well, please add an = entry >>>> to the Wiki! >>>>=20 >>>> maillist : ntg-context@ntg.nl >>>> / = http://www.ntg.nl/mailman/listinfo/ntg-context >>>> webpage : http://www.pragma-ade.nl >>>> / http://context.aanhet.net >>>> >>>> archive : https://bitbucket.org/phg/context-mirror/commits/ >>>> wiki : http://contextgarden.net >>>> = __________________________________________________________________________= _________ >>>=20 >>>=20 >>>=20 >>> = __________________________________________________________________________= _________ >>> If your question is of interest to others as well, please add an = entry to the Wiki! >>>=20 >>> maillist : ntg-context@ntg.nl / = http://www.ntg.nl/mailman/listinfo/ntg-context >>> webpage : http://www.pragma-ade.nl / http://context.aanhet.net >>> archive : https://bitbucket.org/phg/context-mirror/commits/ >>> wiki : http://contextgarden.net >>> = __________________________________________________________________________= _________ >>>=20 >>=20 >> = __________________________________________________________________________= _________ >> If your question is of interest to others as well, please add an = entry to the Wiki! >>=20 >> maillist : ntg-context@ntg.nl / = http://www.ntg.nl/mailman/listinfo/ntg-context >> webpage : http://www.pragma-ade.nl / http://context.aanhet.net >> archive : https://bitbucket.org/phg/context-mirror/commits/ >> wiki : http://contextgarden.net >> = __________________________________________________________________________= _________ >=20 > Taco Hoekwater > Elvenkind BV >=20 >=20 >=20 >=20 > = __________________________________________________________________________= _________ > If your question is of interest to others as well, please add an entry = to the Wiki! >=20 > maillist : ntg-context@ntg.nl / = http://www.ntg.nl/mailman/listinfo/ntg-context > webpage : http://www.pragma-ade.nl / http://context.aanhet.net > archive : https://bitbucket.org/phg/context-mirror/commits/ > wiki : http://contextgarden.net > = __________________________________________________________________________= _________ --Apple-Mail=_EC014DA8-2C78-4845-9554-9595926B6E83 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 Beste= Taco,

Ik probeer = jouw oplossing maar er gebeurt nog iets raars. Ik krijg inderdaad 200 = resp. 404 terug bij bestaande niet-bestaande Uri=E2=80=99s. Maar ik = krijg wel een error die aan het eind van de run gegenereerd wordt. Heb = jij enig idee waar ik dat zou moeten zoeken? Als ik de call naar = \verbose uitschakel komt er geen foutmelding. Blijft er na de socket = call iets achter wat nog opgeruimd had moeten worden?

Hier een deel van de = context-log en de code fragmenten in kwestie. <takepersons> is de = root node van het bewerkte bestand.

HVDM-PEV-TEST   > return code: 200
HVDM-PEV  =       > number of events processed: 1
HVDM-PEV  =       > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D end of = takepersons =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
backend   =       > xmp > using file = '/Users/hansm/TeX/context-45/tex/texmf-context/tex/context/base/mkiv/lpdf-= pdx.xml'
pages           > flushing = realpage 1, userpage 1, subpage 1
close source    > level 2, order 13, = name '/Users/hansm/Documents/Genealogie/familie-event.tex'
close source  =   > level 1, order 13, name = '/Users/hansm/TeX/context-45/tex/texmf-context/tex/context/base/mkiv/cont-= yes.mkiv'

lua error       > lua error on line = 0 in file :

...-45/tex/texmf-context/tex/context/base/mkiv/core-uti.lua:92:= attempt to index a number value (global 'status')
<empty file>

Process aborted

Code in = tex:
= \def\URIReturnCode#1{\ctxlua{tex.print(hvdm.urireturncode("#1"))}}&= nbsp;
= \verbose{HVDM-PEV-TEST}{return code: = \URIReturnCode{\theurl}}
Code in lua:
hvdm.urireturncode =3D function = (theuri)
= content, status, authinfo =3D = socket.http.request{
= method =3D "HEAD",
= url =3D theuri,
= }
= return tostring(status)
= end

Groet Hans



On = 16 May 2018, at 14:23, Taco Hoekwater <taco@elvenkind.com> = wrote:


Or use luasocket, which is included in the = luatex binary:

\startluacode
content, status, authinfo =3D socket.http.request{
   method =3D "HEAD",
=    url =3D "http://hansvandermeer.myqnapcloud.com/archive/denhaag/hga-dtb-1= 869-6040.pdf=E2=80=9D
}

print (status)

\stopluacode

prints =E2=80=98404=E2=80=99 in this case.

Taco

On 16 May 2018, at 13:45, Henri Menke <henrimenke@gmail.com> wrote:

On 05/16/2018 11:23 PM, Hans van der Meer wrote:
I would be satisfied = when a returned 404 error code will be handled
within a = reasonable (configurable) time delay. As for redirection, there
I would not mind if it is not included.
Restrictions like that are not a problem for me, because this = is for
building a pdf that accesses many internet located = files. The check on
existence is therefore especially = meant for spotting missing or misnamed
files.

You can use libcurl via ffi: https://curl.haxx.se/libcurl/

\startluacode
local ffi =3D require("ffi")

ffi.cdef[[
typedef struct = Curl_easy CURL;
typedef int CURLcode;
typedef = int CURLoption;
typedef int CURLINFO;
typedef = size_t(*callback)(void *buffer, size_t size, size_t nmemb, void
*userp);

CURLcode = curl_global_init(long flags);
CURL = *curl_easy_init(void);
CURLcode curl_easy_setopt(CURL = *curl, CURLoption option, ...);
CURLcode = curl_easy_perform(CURL *curl);
CURLcode = curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
void = curl_easy_cleanup(CURL *curl);
void = curl_global_cleanup(void);
]]

-- magic numbers
local CURL_GLOBAL_DEFAULT =3D = 3
local CURLOPT_URL =3D 10002
local = CURLOPT_NOBODY =3D 44
local CURLOPT_HEADER =3D 42
local CURLOPT_WRITEFUNCTION =3D 20011
local = CURLINFO_RESPONSE_CODE =3D 0x200000 + 2

local= lcurl =3D ffi.load("curl")

local function = discard(buffer, size, nmemb, userp)
  return = size * nmemb
end

function = check_status(url)
=   lcurl.curl_global_init(CURL_GLOBAL_DEFAULT)

  local curl =3D lcurl.curl_easy_init()

  lcurl.curl_easy_setopt(curl, = CURLOPT_URL, url)
=   lcurl.curl_easy_setopt(curl, CURLOPT_NOBODY, = ffi.cast("long",1))
=   lcurl.curl_easy_setopt(curl, CURLOPT_HEADER, = ffi.cast("long",1))
=   lcurl.curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,
ffi.cast("callback",discard));

=   local res =3D lcurl.curl_easy_perform(curl)
=   local c_http_code =3D ffi.new("long[1]")
=   lcurl.curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, = c_http_code);

=   lcurl.curl_easy_cleanup(curl)
=   lcurl.curl_global_cleanup()

=   return tonumber(c_http_code[0])
end
\stopluacode

\starttext

\ctxlua{context(check_status("http://example.com/"))}

\ctxlua{context(check_status("https://example.com/"))}

\ctxlua{context(check_status("https://example.com/xyz"))}

\stoptext


Hans van der Meer

On 16 May = 2018, at 12:41, Henri Menke <henrimenke@gmail.com
<mailto:henrimenke@gmail.com>> wrote:

On 05/16/2018 09:31 PM, Hans van der Meer = wrote:
I tried to = determine the existence of a file on the internet. See the
following macro call:

=        % Test if file exists.
       \edef\theurl{\linkprotocol://\urlbase\xmlatt{#1}{link}\thesuffix}
       \doiffileelse
       {\theurl}
=        {\verbose{HVDM-PEV-TEST}{file = exists: \theurl}}
=        {\verbose{HVDM-PEV-TEST}{file = does not exist: \theurl}}

It seems that = \doiffileelse always results in true except for local
files = where nonexistence is correctly handled.

For = example the following url definitely does not exist but nevertheless
\doiffileelse reports its existence:
HVDM-PEV-TEST   > file exists:
http://hansvandermeer.myqnapcloud.com/archive/denhaag/hga-dtb-1= 869-6040.pdf

Is it possible that the = \doiffile macros are extended for files on the
internet or = a correponding set \doifurl is developed?

I'm not speaking for the devs here, but I don't think that = this is going
to be included.  It would require that = all webpages send proper 404
codes and timeout after = reasonable delay.  Also how would you handle
redirects?=  Should the ConTeXt run be stalled because checking for a
files existence on the web is caught in a redirect loop?


Hans van der Meer



_______________________________________________________________= ____________________
If your question is of interest to = others as well, please add an
entry to the Wiki!

maillist : ntg-context@ntg.nl <mailto:ntg-context@ntg.nl> /
http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / = http://context.aanhet.net
archive  : = https://bitbucket.org/phg/context-mirror/commits/
wiki =     : http://contextgarden.net
_______________________________________________________________= ____________________


_______________________________________________________________= ____________________
If your question is of interest to = others as well, please add an entry
to the Wiki!

maillist : ntg-context@ntg.nl
<mailto:ntg-context@ntg.nl> / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl
<http://www.pragma-ade.nl/> / http://context.aanhet.net
<http://context.aanhet.net/>
archive =  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net = <http://contextgarden.net/>
_______________________________________________________________= ____________________



_______________________________________________________________= ____________________
If your question is of interest to = others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : = https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
_______________________________________________________________= ____________________


_______________________________________________________________= ____________________
If your question is of interest to = others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : = https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
_______________________________________________________________= ____________________

Taco = Hoekwater
Elvenkind BV




_______________________________________________________________= ____________________
If your question is of interest to = others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : = https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
_______________________________________________________________= ____________________

= --Apple-Mail=_EC014DA8-2C78-4845-9554-9595926B6E83-- --===============3215700540645035787== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cDovL3d3dy5udGcubmwvbWFpbG1hbi9s aXN0aW5mby9udGctY29udGV4dAp3ZWJwYWdlICA6IGh0dHA6Ly93d3cucHJhZ21hLWFkZS5ubCAv IGh0dHA6Ly9jb250ZXh0LmFhbmhldC5uZXQKYXJjaGl2ZSAgOiBodHRwczovL2JpdGJ1Y2tldC5v cmcvcGhnL2NvbnRleHQtbWlycm9yL2NvbW1pdHMvCndpa2kgICAgIDogaHR0cDovL2NvbnRleHRn YXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f --===============3215700540645035787==--