commit da8298d8640aebe75f918168548a2edaa8b30983 Author: eutro Date: Tue Apr 1 18:22:20 2025 +0100 Initial commit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..d8afe9a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,29 @@ +on: [push, pull_request] +name: CI +jobs: + build: + name: "Build on Racket '${{ matrix.racket-version }}' (${{ matrix.racket-variant }})" + runs-on: ubuntu-latest + continue-on-error: ${{ matrix.experimental || false }} + strategy: + fail-fast: false + matrix: + racket-version: ["stable", "current"] + racket-variant: ["BC", "CS"] + include: + - racket-version: current + experimental: true + steps: + - uses: actions/checkout@v4 + - uses: Bogdanp/setup-racket@v1.11 + with: + architecture: x64 + distribution: full + variant: ${{ matrix.racket-variant }} + version: ${{ matrix.racket-version }} + - name: Installing auto-rename and its dependencies + run: raco pkg install --no-docs --auto --name auto-rename + - name: Compiling auto-rename and building its docs + run: raco setup --check-pkg-deps --unused-pkg-deps auto-rename + - name: Testing auto-rename + run: raco test -x -p auto-rename diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a59348 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*~ +\#* +.\#* +.DS_Store +compiled/ +/doc/ diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..5f91118 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,13 @@ +Copyright 2025 eutro + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000..61caf82 --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,23 @@ +auto-rename + +MIT License + +Copyright (c) 2025 eutro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..91267c0 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +Auto Rename +=========== + +A package for programmatic require and provide transformers. diff --git a/filters.rkt b/filters.rkt new file mode 100644 index 0000000..81317a9 --- /dev/null +++ b/filters.rkt @@ -0,0 +1,167 @@ +#lang racket/base + +(require racket/contract + racket/provide-transform + racket/require-transform + racket/sequence + + syntax/parse/define + (for-syntax racket/base)) + +(provide transform/filter transform/when + transform/remove transform/unless + transform/filter-raw + transform/remove-raw + transform/map transform/for + transform/map-raw + transform/append-map transform/for* + transform/append-map-raw + transform/matches + transform/replace + transform/disambiguate + + im/export/c + im/export-name + im/export-map-name + filter/c + reducing-function/c + transform/compose) + +(define im/export/c (or/c import? export?)) + +(define (reducing-function/c in/c acc/c) + (rename-contract + (case-> + (in/c acc/c . -> . acc/c) + (acc/c . -> . acc/c)) + (list 'reducing-function/c + (contract-name in/c) + (contract-name acc/c)))) + +(define filter/c + (rename-contract + (parametric->/c + (Acc) + (-> (reducing-function/c im/export/c Acc) + (reducing-function/c im/export/c Acc))) + 'filter/c)) + +(define/contract transform/compose + (filter/c ... . -> . filter/c) + compose1) + +(define/contract ((transform/filter-raw accept?) rf) + ((-> im/export/c any/c) . -> . filter/c) + (case-lambda + [(im/ex acc) (if (accept? im/ex) (rf im/ex acc) acc)] + [(acc) acc])) + +(define/contract (transform/remove-raw reject?) + ((-> im/export/c any/c) . -> . filter/c) + (transform/filter-raw (λ (it) (not (reject? it))))) + +(define/contract (transform/filter accept?) + ((-> string? any/c) . -> . filter/c) + (transform/filter-raw (λ (it) (accept? (im/export-name it))))) + +(define-syntax-parse-rule (transform/when name:id expr) + ;; using a function contract gives better errors than just any/c on + ;; expr does, in the case that expr returns multiple values + #:with fun #'(λ (name) expr) + #:declare fun (expr/c #'(-> string? any/c) #:name "when") + (transform/filter fun.c)) + +(define/contract (transform/remove reject?) + ((-> string? any/c) . -> . filter/c) + (transform/filter-raw (λ (it) (not (reject? (im/export-name it)))))) + +(define-syntax-parse-rule (transform/unless name:id expr) + #:with fun #'(λ (name) expr) + #:declare fun (expr/c #'(-> string? any/c) #:name "unless") + (transform/remove fun.c)) + +(define/contract ((transform/map-raw func) rf) + ((-> im/export/c im/export/c) . -> . filter/c) + (case-lambda + [(im/ex acc) (rf (func im/ex) acc)] + [(acc) acc])) + +(define/contract (transform/map func) + ((-> string? string?) . -> . filter/c) + (transform/map-raw (λ (it) (im/export-map-name it func)))) + +(define-syntax-parse-rule (transform/for name:id expr) + #:with fun #'(λ (name) expr) + #:declare fun (expr/c #'(-> string? string?) #:name "for") + (transform/map fun.c)) + +(define/contract ((transform/append-map-raw func) rf) + ((-> im/export/c (sequence/c im/export/c)) . -> . filter/c) + (case-lambda + [(im/ex acc) (for/fold ([acc acc]) ([v (func im/ex)]) (rf v acc))] + [(acc) acc])) + +(define/contract (transform/append-map func) + ((-> string? (sequence/c string?)) . -> . filter/c) + (transform/append-map-raw + (λ (im/ex) + (for*/list ([name (func (im/export-name im/ex))]) + (im/export-map-name im/ex (λ (_prev) name)))))) + +(define-syntax-parse-rule (transform/for* name:id expr) + #:with fun #'(λ (name) expr) + #:declare fun (expr/c #'(-> string? (sequence/c string?)) #:name "for*") + (transform/append-map fun.c)) + +(define/contract (transform/matches pat) + ((or/c regexp? string?) . -> . filter/c) + (transform/filter (λ (it) (regexp-match? pat it)))) + +(define/contract (transform/replace pat replacement) + ((or/c regexp? string?) (or/c string? (unconstrained-domain-> string?)) . -> . filter/c) + (transform/map (λ (it) (regexp-replace* pat it replacement)))) + +(define/contract ((transform/disambiguate [n->str (λ (orig i) (format "~a-~a" orig i))]) rf) + (() ((-> string? natural-number/c string?)) . ->* . filter/c) + (define seen (make-hasheq)) + (case-lambda + [(im/ex acc) + (let loop ([im/ex im/ex]) + (define sym-name (string->symbol (im/export-name im/ex))) + (hash-update! seen sym-name add1 0) + (define conflicts (hash-ref seen sym-name)) + (cond + [(= 1 conflicts) (rf im/ex acc)] + [else + (define (nth-name orig-name) (n->str orig-name conflicts)) + (loop (im/export-map-name im/ex nth-name))]))] + [(acc) acc])) + +(define (im/export-name x) + (cond + [(string? x) x] + [else + (im/export-name + (cond + [(import? x) (import-local-id x)] + [(export? x) (export-out-id x)] + [(identifier? x) (syntax-e x)] + [(symbol? x) (symbol->string x)] + [else (raise-argument-error 'im/export-name "(or/c symbol? identifier? import? export?)" x)]))])) + +(define (im/export-map-name x string-func) + (cond + [(string? x) + (define transformed (string-func x)) + (if (equal? x transformed) x transformed)] + [else + (define-values (x-> ->x) + (cond + [(symbol? x) (values symbol->string string->symbol)] + [(identifier? x) (values syntax-e (λ (it) (datum->syntax x it x)))] + [(import? x) (values import-local-id (λ (it) (struct-copy import x [local-id it])))] + [(export? x) (values export-out-id (λ (it) (struct-copy export x [out-id it])))] + [else (raise-argument-error 'transform "(or/c symbol? identifier? import? export?)" x)])) + (define unwrapped (x-> x)) + (define transformed (im/export-map-name unwrapped string-func)) + (if (eq? transformed unwrapped) x (->x transformed))])) diff --git a/info.rkt b/info.rkt new file mode 100644 index 0000000..789e4eb --- /dev/null +++ b/info.rkt @@ -0,0 +1,9 @@ +#lang info +(define collection "auto-rename") +(define deps '("base")) +(define build-deps '("scribble-lib" "racket-doc" "rackunit-lib")) +(define scribblings '(("scribblings/auto-rename.scrbl" ()))) +(define pkg-desc "Description Here") +(define version "0.0") +(define pkg-authors '(eutro)) +(define license '(Apache-2.0 OR MIT)) diff --git a/language/.gitignore b/language/.gitignore new file mode 100644 index 0000000..a71d2d9 --- /dev/null +++ b/language/.gitignore @@ -0,0 +1 @@ +*-words.*.tsv \ No newline at end of file diff --git a/language/british-english.rkt b/language/british-english.rkt new file mode 100644 index 0000000..690d8bd --- /dev/null +++ b/language/british-english.rkt @@ -0,0 +1,64 @@ +#lang racket/base + +(require (for-syntax racket/base racket/string) + "../main.rkt") +(provide for-british for-american) + +(begin-for-syntax + (require racket/runtime-path) + + ;; british_spellings.tsv was taken from + ;; https://github.com/hyperreality/American-British-English-Translator/blob/f8806121e58530f601b84ebb7302afc81b8b1461/data/british_spellings.json + (define-runtime-path british-spellings-path "british_spellings.tsv") + + (define tsv-data + (call-with-input-file* british-spellings-path + #:mode 'text + (λ (ic) + (for/list ([line (in-lines ic)]) + (apply cons (string-split line "\t")))))) + + (define (flip-pair x) (cons (cdr x) (car x))) + (define british->american-map (make-immutable-hash tsv-data)) + (define american->british-map (make-immutable-hash (map flip-pair tsv-data))) + + ;; TODO: introduce rule-based matcher rather than just consulting a table, + ;; to catch things like `dingor-frombilizer` -> `dingour-frombiliser` + (define ((map-words table) name) + (regexp-replace* + #rx"[a-zA-Z]+" name + (λ (word) (hash-ref table word word))))) + +(define-syntax for-british + (make-auto-rename-transformer + (tx/map (map-words american->british-map)))) +(define-syntax for-american + (make-auto-rename-transformer + (tx/map (map-words british->american-map)))) + +(module+ test + (module american racket/base + (provide (all-defined-out)) + (define-values (color-red + 500-eons-ago + emergency-breathalyzer + galvanized-square-steel) + (values 1 2 3 4))) + + (module british racket/base + (provide (all-defined-out)) + (define-values (cosy-defenceless-cottage + fibre-glass-fishing-rod + watercolour-fertiliser) + (values 'a 'b 'c))) + + (require (for-british 'american) + (for-american 'british) + rackunit) + + (check-equal? + (list colour-red 500-aeons-ago emergency-breathalyser galvanised-square-steel) + (list 1 2 3 4)) + (check-equal? + (list cozy-defenseless-cottage fiber-glass-fishing-rod watercolor-fertilizer) + (list 'a 'b 'c))) diff --git a/language/british_spellings.tsv b/language/british_spellings.tsv new file mode 100644 index 0000000..9472e52 --- /dev/null +++ b/language/british_spellings.tsv @@ -0,0 +1,1814 @@ +Africanisation Africanization +Africanise Africanize +Americanisation Americanization +Americanise Americanize +Arabise Arabize +Finlandisation Finlandization +accessorise accessorize +accessorised accessorized +accessorises accessorizes +accessorising accessorizing +acclimatisation acclimatization +acclimatise acclimatize +acclimatised acclimatized +acclimatises acclimatizes +acclimatising acclimatizing +accoutrements accouterments +aeon eon +aeons eons +aerogramme aerogram +aerogrammes aerograms +aeroplane airplane +aeroplanes airplanes +aesthete esthete +aesthetes esthetes +aesthetic esthetic +aesthetically esthetically +aesthetics esthetics +aetiology etiology +ageing aging +aggrandise aggrandize +aggrandisement aggrandizement +agonise agonize +agonised agonized +agonises agonizes +agonising agonizing +agonisingly agonizingly +allegorise allegorize +almanack almanac +almanacks almanacs +aluminium aluminum +amortisable amortizable +amortisation amortization +amortisations amortizations +amortise amortize +amortised amortized +amortises amortizes +amortising amortizing +amoxycillin amoxicillin +amphitheatre amphitheater +amphitheatres amphitheaters +anaemia anemia +anaemic anemic +anaesthesia anesthesia +anaesthetic anesthetic +anaesthetics anesthetics +anaesthetise anesthetize +anaesthetised anesthetized +anaesthetises anesthetizes +anaesthetising anesthetizing +anaesthetist anesthetist +anaesthetists anesthetists +anaesthetize anesthetize +anaesthetized anesthetized +anaesthetizes anesthetizes +anaesthetizing anesthetizing +analogue analog +analogues analogs +analyse analyze +analysed analyzed +analyses analyzes +analysing analyzing +ancle ankle +anglicise anglicize +anglicised anglicized +anglicises anglicizes +anglicising anglicizing +annexe annex +annualised annualized +antagonise antagonize +antagonised antagonized +antagonises antagonizes +antagonising antagonizing +apologise apologize +apologised apologized +apologises apologizes +apologising apologizing +apophthegm apothegm +apostatise apostatize +appal appall +appals appalls +appetiser appetizer +appetisers appetizers +appetising appetizing +appetisingly appetizingly +arbour arbor +arbours arbors +archaeological archeological +archaeologically archeologically +archaeologist archeologist +archaeologists archeologists +archaeology archeology +ardour ardor +armour armor +armoured armored +armourer armorer +armourers armorers +armouries armories +armoury armory +artefact artifact +artefacts artifacts +atomise atomize +atomiser atomizer +attitudinise attitudinize +authorisation authorization +authorise authorize +authorised authorized +authorises authorizes +authorising authorizing +autolyse autolyze +axe ax +axiomatisation axiomatization +backpedalled backpedaled +backpedalling backpedaling +backtenter backtender +baist baste +bannister banister +bannisters banisters +baptise baptize +baptised baptized +baptises baptizes +baptising baptizing +bastardise bastardize +bastardised bastardized +bastardises bastardizes +bastardising bastardizing +battleaxe battleax +baulk balk +baulked balked +baulking balking +baulks balks +bedevilled bedeviled +bedevilling bedeviling +behaviour behavior +behavioural behavioral +behaviourism behaviorism +behaviourist behaviorist +behaviourists behaviorists +behaviours behaviors +behove behoove +behoved behooved +behoves behooves +bejewelled bejeweled +belabour belabor +belaboured belabored +belabouring belaboring +belabours belabors +bevelled beveled +bevvies bevies +bevvy bevy +biassed biased +biassing biasing +bingeing binging +botanise botanize +bougainvillaea bougainvillea +bougainvillaeas bougainvilleas +bowdlerise bowdlerize +bowdlerised bowdlerized +bowdlerises bowdlerizes +bowdlerising bowdlerizing +breathalyse breathalyze +breathalysed breathalyzed +breathalyser breathalyzer +breathalysers breathalyzers +breathalyses breathalyzes +breathalysing breathalyzing +brutalise brutalize +brutalised brutalized +brutalises brutalizes +brutalising brutalizing +buses busses +busing bussing +caesarean cesarean +caesareans cesareans +caesium cesium +calibre caliber +calibres calibers +calliper caliper +callipers calipers +callisthenics calisthenics +canalise canalize +canalised canalized +canalises canalizes +canalising canalizing +cancellation cancelation +cancellations cancelations +cancelled canceled +cancelling canceling +candour candor +cannibalise cannibalize +cannibalised cannibalized +cannibalises cannibalizes +cannibalising cannibalizing +canonise canonize +canonised canonized +canonises canonizes +canonising canonizing +capitalise capitalize +capitalised capitalized +capitalises capitalizes +capitalising capitalizing +caramelise caramelize +caramelised caramelized +caramelises caramelizes +caramelising caramelizing +carbonise carbonize +carbonised carbonized +carbonises carbonizes +carbonising carbonizing +carcase carcass +carolled caroled +carolling caroling +catalogue catalog +catalogued cataloged +catalogues catalogs +cataloguing cataloging +catalyse catalyze +catalysed catalyzed +catalyses catalyzes +catalysing catalyzing +categorise categorize +categorised categorized +categorises categorizes +categorising categorizing +cauterise cauterize +cauterised cauterized +cauterises cauterizes +cauterising cauterizing +cavilled caviled +cavilling caviling +centigramme centigram +centigrammes centigrams +centilitre centiliter +centilitres centiliters +centimetre centimeter +centimetres centimeters +centralise centralize +centralised centralized +centralises centralizes +centralising centralizing +centre center +centred centered +centrefold centerfold +centrefolds centerfolds +centrepiece centerpiece +centrepieces centerpieces +centres centers +channelled channeled +channelling channeling +characterisation characterization +characterise characterize +characterised characterized +characterises characterizes +characterising characterizing +chequebook checkbook +chequebooks checkbooks +chequered checkered +chilli chili +chimaera chimera +chimaeras chimeras +chimaeric chimeric +chimaerism chimerism +chiselled chiseled +chiselling chiseling +circularise circularize +circularised circularized +circularises circularizes +circularising circularizing +civilisation civilization +civilise civilize +civilised civilized +civilises civilizes +civilising civilizing +clamour clamor +clamoured clamored +clamouring clamoring +clamours clamors +clangour clangor +clarinettist clarinetist +clarinettists clarinetists +collectivise collectivize +collectivised collectivized +collectivises collectivizes +collectivising collectivizing +colonisation colonization +colonise colonize +colonised colonized +coloniser colonizer +colonisers colonizers +colonises colonizes +colonising colonizing +colour color +colourant colorant +colourants colorants +coloured colored +coloureds coloreds +colourful colorful +colourfully colorfully +colouring coloring +colourize colorize +colourized colorized +colourizes colorizes +colourizing colorizing +colourless colorless +colours colors +commercialise commercialize +commercialised commercialized +commercialises commercializes +commercialising commercializing +compartmentalise compartmentalize +compartmentalised compartmentalized +compartmentalises compartmentalizes +compartmentalising compartmentalizing +computerise computerize +computerised computerized +computerises computerizes +computerising computerizing +conceptualise conceptualize +conceptualised conceptualized +conceptualises conceptualizes +conceptualising conceptualizing +contextualise contextualize +contextualised contextualized +contextualises contextualizes +contextualising contextualizing +conveyorise conveyorize +cosier cozier +cosies cozies +cosiest coziest +cosily cozily +cosiness coziness +cosy cozy +councillor councilor +councillors councilors +counselled counseled +counselling counseling +counsellor counselor +counsellors counselors +crenellated crenelated +creolise creolize +criminalise criminalize +criminalised criminalized +criminalises criminalizes +criminalising criminalizing +criticise criticize +criticised criticized +criticises criticizes +criticising criticizing +crueller crueler +cruellest cruelest +crystallisation crystallization +crystallise crystallize +crystallised crystallized +crystallises crystallizes +crystallising crystallizing +cudgelled cudgeled +cudgelling cudgeling +customise customize +customised customized +customises customizes +customising customizing +decentralisation decentralization +decentralise decentralize +decentralised decentralized +decentralises decentralizes +decentralising decentralizing +decriminalisation decriminalization +decriminalise decriminalize +decriminalised decriminalized +decriminalises decriminalizes +decriminalising decriminalizing +defence defense +defenceless defenseless +defences defenses +dehumanisation dehumanization +dehumanise dehumanize +dehumanised dehumanized +dehumanises dehumanizes +dehumanising dehumanizing +demeanour demeanor +demilitarisation demilitarization +demilitarise demilitarize +demilitarised demilitarized +demilitarises demilitarizes +demilitarising demilitarizing +demobilisation demobilization +demobilise demobilize +demobilised demobilized +demobilises demobilizes +demobilising demobilizing +democratisation democratization +democratise democratize +democratised democratized +democratises democratizes +democratising democratizing +demonise demonize +demonised demonized +demonises demonizes +demonising demonizing +demoralisation demoralization +demoralise demoralize +demoralised demoralized +demoralises demoralizes +demoralising demoralizing +denationalisation denationalization +denationalise denationalize +denationalised denationalized +denationalises denationalizes +denationalising denationalizing +deodorise deodorize +deodorised deodorized +deodorises deodorizes +deodorising deodorizing +depersonalise depersonalize +depersonalised depersonalized +depersonalises depersonalizes +depersonalising depersonalizing +deputise deputize +deputised deputized +deputises deputizes +deputising deputizing +desensitisation desensitization +desensitise desensitize +desensitised desensitized +desensitises desensitizes +desensitising desensitizing +despatch dispatch +destabilisation destabilization +destabilise destabilize +destabilised destabilized +destabilises destabilizes +destabilising destabilizing +dialled dialed +dialling dialing +dialogue dialog +dialogues dialogs +diarrhoea diarrhea +digitise digitize +digitised digitized +digitises digitizes +digitising digitizing +disc disk +discolour discolor +discoloured discolored +discolouring discoloring +discolours discolors +discs disks +disembowelled disemboweled +disembowelling disemboweling +disfavour disfavor +dishevelled disheveled +dishonour dishonor +dishonourable dishonorable +dishonourably dishonorably +dishonoured dishonored +dishonouring dishonoring +dishonours dishonors +disorganisation disorganization +disorganised disorganized +distil distill +distils distills +doorsman doorman +doyley doily +dramatisation dramatization +dramatisations dramatizations +dramatise dramatize +dramatised dramatized +dramatises dramatizes +dramatising dramatizing +draught draft +draughtboard draftboard +draughtboards draftboards +draughtier draftier +draughtiest draftiest +draughtsman draftsman +draughtsmanship draftsmanship +draughtsmen draftsmen +draughtswoman draftswoman +draughtswomen draftswomen +draughty drafty +drivelled driveled +drivelling driveling +duelled dueled +duelling dueling +dyspnoea dyspnea +economise economize +economised economized +economises economizes +economising economizing +editorialise editorialize +editorialised editorialized +editorialises editorializes +editorialising editorializing +edoema edema +embolisation embolization +empathise empathize +empathised empathized +empathises empathizes +empathising empathizing +emphasise emphasize +emphasised emphasized +emphasises emphasizes +emphasising emphasizing +enamelled enameled +enamelling enameling +enamour enamor +enamoured enamored +encyclopaedia encyclopedia +encyclopaedias encyclopedias +encyclopaedic encyclopedic +endeavour endeavor +endeavoured endeavored +endeavouring endeavoring +endeavours endeavors +energise energize +energised energized +energises energizes +energising energizing +enrol enroll +enrols enrolls +enthral enthrall +enthrals enthralls +epaulette epaulet +epaulettes epaulets +epicentre epicenter +epicentres epicenters +epilogue epilog +epilogues epilogs +epitomise epitomize +epitomised epitomized +epitomises epitomizes +epitomising epitomizing +equalisation equalization +equalise equalize +equalised equalized +equaliser equalizer +equalisers equalizers +equalises equalizes +equalising equalizing +ergotised ergotized +eulogise eulogize +eulogised eulogized +eulogises eulogizes +eulogising eulogizing +evangelise evangelize +evangelised evangelized +evangelises evangelizes +evangelising evangelizing +exorcise exorcize +exorcised exorcized +exorcises exorcizes +exorcising exorcizing +extemporisation extemporization +extemporise extemporize +extemporised extemporized +extemporises extemporizes +extemporising extemporizing +exteriorise exteriorize +externalisation externalization +externalisations externalizations +externalise externalize +externalised externalized +externalises externalizes +externalising externalizing +factorise factorize +factorised factorized +factorises factorizes +factorising factorizing +faecal fecal +faeces feces +familiarisation familiarization +familiarise familiarize +familiarised familiarized +familiarises familiarizes +familiarising familiarizing +fantasise fantasize +fantasised fantasized +fantasises fantasizes +fantasising fantasizing +favour favor +favourable favorable +favourably favorably +favoured favored +favouring favoring +favourite favorite +favourites favorites +favouritism favoritism +favours favors +featurisation featurization +featurise featurize +featurised featurized +feminise feminize +feminised feminized +feminises feminizes +feminising feminizing +fertilisation fertilization +fertilise fertilize +fertilised fertilized +fertiliser fertilizer +fertilisers fertilizers +fertilises fertilizes +fertilising fertilizing +fervour fervor +fibre fiber +fibreglass fiberglass +fibres fibers +fictionalisation fictionalization +fictionalisations fictionalizations +fictionalise fictionalize +fictionalised fictionalized +fictionalises fictionalizes +fictionalising fictionalizing +fillet filet +filleted fileted +filleting fileting +fillets filets +finalisation finalization +finalise finalize +finalised finalized +finalises finalizes +finalising finalizing +flautist flutist +flautists flutists +flavour flavor +flavoured flavored +flavouring flavoring +flavourings flavorings +flavourless flavorless +flavours flavors +flavoursome flavorsome +foetal fetal +foetid fetid +foeto feto- +foetus fetus +foetuses fetuses +formalisation formalization +formalise formalize +formalised formalized +formalises formalizes +formalising formalizing +fossilisation fossilization +fossilise fossilize +fossilised fossilized +fossilises fossilizes +fossilising fossilizing +fraternisation fraternization +fraternise fraternize +fraternised fraternized +fraternises fraternizes +fraternising fraternizing +fulfil fulfill +fulfilment fulfillment +fulfils fulfills +funnelled funneled +funnelling funneling +galvanise galvanize +galvanised galvanized +galvanises galvanizes +galvanising galvanizing +gambolled gamboled +gambolling gamboling +gaolbird jailbird +gaolbirds jailbirds +gaolbreak jailbreak +gaolbreaks jailbreaks +gaoled jailed +gaoler jailer +gaolers jailers +gaoling jailing +gaols jails +gases gasses +gauge gage +gauged gaged +gauges gages +gauging gaging +generalisation generalization +generalisations generalizations +generalise generalize +generalised generalized +generalises generalizes +generalising generalizing +ghettoise ghettoize +ghettoised ghettoized +ghettoises ghettoizes +ghettoising ghettoizing +gipsies gypsies +glamorise glamorize +glamorised glamorized +glamorises glamorizes +glamorising glamorizing +glamour glamor +globalisation globalization +globalise globalize +globalised globalized +globalises globalizes +globalising globalizing +glueing gluing +goitre goiter +goitres goiters +gonorrhoea gonorrhea +gormandise gormandize +gramme gram +grammes grams +gravelled graveled +grey gray +greyed grayed +greying graying +greyish grayish +greyness grayness +greys grays +grovelled groveled +grovelling groveling +groyne groin +groynes groins +gruelling grueling +gruellingly gruelingly +gryphon griffin +gryphons griffins +gynaecological gynecological +gynaecologist gynecologist +gynaecologists gynecologists +gynaecology gynecology +haematological hematological +haematologist hematologist +haematologists hematologists +haematology hematology +haemoglobin hemoglobin +haemophilia hemophilia +haemophiliac hemophiliac +haemophiliacs hemophiliacs +haemorrhage hemorrhage +haemorrhaged hemorrhaged +haemorrhages hemorrhages +haemorrhaging hemorrhaging +haemorrhoids hemorrhoids +harbour harbor +harboured harbored +harbouring harboring +harbours harbors +harmonisation harmonization +harmonise harmonize +harmonised harmonized +harmonises harmonizes +harmonising harmonizing +homoeopath homeopath +homoeopathic homeopathic +homoeopaths homeopaths +homoeopathy homeopathy +homogenise homogenize +homogenised homogenized +homogenises homogenizes +homogenising homogenizing +honour honor +honourable honorable +honourably honorably +honoured honored +honouring honoring +honours honors +hospitalisation hospitalization +hospitalise hospitalize +hospitalised hospitalized +hospitalises hospitalizes +hospitalising hospitalizing +humanise humanize +humanised humanized +humanises humanizes +humanising humanizing +humour humor +humoured humored +humouring humoring +humourless humorless +humours humors +hybridise hybridize +hybridised hybridized +hybridises hybridizes +hybridising hybridizing +hypnotise hypnotize +hypnotised hypnotized +hypnotises hypnotizes +hypnotising hypnotizing +hypothesise hypothesize +hypothesised hypothesized +hypothesises hypothesizes +hypothesising hypothesizing +idealisation idealization +idealise idealize +idealised idealized +idealises idealizes +idealising idealizing +idolise idolize +idolised idolized +idolises idolizes +idolising idolizing +immobilisation immobilization +immobilise immobilize +immobilised immobilized +immobiliser immobilizer +immobilisers immobilizers +immobilises immobilizes +immobilising immobilizing +immortalise immortalize +immortalised immortalized +immortalises immortalizes +immortalising immortalizing +immunisation immunization +immunise immunize +immunised immunized +immunises immunizes +immunising immunizing +impanelled impaneled +impanelling impaneling +imperilled imperiled +imperilling imperiling +individualise individualize +individualised individualized +individualises individualizes +individualising individualizing +industrialise industrialize +industrialised industrialized +industrialises industrializes +industrialising industrializing +initialisation initialization +initialisations initializations +initialise initialize +initialised initialized +initialises initializes +initialising initializing +initialled initialed +initialling initialing +instalment installment +instalments installments +instil instill +instils instills +institutionalisation institutionalization +institutionalise institutionalize +institutionalised institutionalized +institutionalises institutionalizes +institutionalising institutionalizing +intellectualise intellectualize +intellectualised intellectualized +intellectualises intellectualizes +intellectualising intellectualizing +interiorise interiorize +internalisation internalization +internalise internalize +internalised internalized +internalises internalizes +internalising internalizing +internationalisation internationalization +internationalise internationalize +internationalised internationalized +internationalises internationalizes +internationalising internationalizing +ionisation ionization +ionise ionize +ionised ionized +ioniser ionizer +ionisers ionizers +ionises ionizes +ionising ionizing +italicise italicize +italicised italicized +italicises italicizes +italicising italicizing +itemise itemize +itemised itemized +itemises itemizes +itemising itemizing +jeopardise jeopardize +jeopardised jeopardized +jeopardises jeopardizes +jeopardising jeopardizing +jewelled jeweled +jeweller jeweler +jewellers jewelers +jewellery jewelry +judgement judgment +kilogramme kilogram +kilogrammes kilograms +kilometre kilometer +kilometres kilometers +labelled labeled +labelling labeling +labour labor +laboured labored +labourer laborer +labourers laborers +labouring laboring +labours labors +lacklustre lackluster +laith lathe +legalisation legalization +legalise legalize +legalised legalized +legalises legalizes +legalising legalizing +legitimise legitimize +legitimised legitimized +legitimises legitimizes +legitimising legitimizing +leuc leuk- +leukaemia leukemia +leukaemogenesis leukemogenesis +levelled leveled +leveller leveler +levellers levelers +levelling leveling +libelled libeled +libelling libeling +libellous libelous +liberalisation liberalization +liberalise liberalize +liberalised liberalized +liberalises liberalizes +liberalising liberalizing +licence license +licenced licensed +licences licenses +licencing licensing +likeable likable +lionisation lionization +lionise lionize +lionised lionized +lionises lionizes +lionising lionizing +liquidise liquidize +liquidised liquidized +liquidiser liquidizer +liquidisers liquidizers +liquidises liquidizes +liquidising liquidizing +liquorice licorice +litre liter +litres liters +localise localize +localised localized +localises localizes +localising localizing +louvre louver +louvred louvered +louvres louvers +lustre luster +lyophilise lyophilize +magnetise magnetize +magnetised magnetized +magnetises magnetizes +magnetising magnetizing +manoeuvrability maneuverability +manoeuvrable maneuverable +manoeuvre maneuver +manoeuvred maneuvered +manoeuvres maneuvers +manoeuvring maneuvering +manoeuvrings maneuverings +marbleise marbleize +marginalisation marginalization +marginalise marginalize +marginalised marginalized +marginalises marginalizes +marginalising marginalizing +marshalled marshaled +marshalling marshaling +marvelled marveled +marvelling marveling +marvellous marvelous +marvellously marvelously +materialisation materialization +materialise materialize +materialised materialized +materialises materializes +materialising materializing +maximisation maximization +maximise maximize +maximised maximized +maximises maximizes +maximising maximizing +meagre meager +mechanisation mechanization +mechanise mechanize +mechanised mechanized +mechanises mechanizes +mechanising mechanizing +mediaeval medieval +memorialise memorialize +memorialised memorialized +memorialises memorializes +memorialising memorializing +memorise memorize +memorised memorized +memorises memorizes +memorising memorizing +mercerise mercerize +mesmerise mesmerize +mesmerised mesmerized +mesmerises mesmerizes +mesmerising mesmerizing +metabolise metabolize +metabolised metabolized +metabolises metabolizes +metabolising metabolizing +methodise methodize +metre meter +metres meters +micrometre micrometer +micrometres micrometers +militarise militarize +militarised militarized +militarises militarizes +militarising militarizing +milligramme milligram +milligrammes milligrams +millilitre milliliter +millilitres milliliters +millimetre millimeter +millimetres millimeters +mineralise mineralize +miniaturisation miniaturization +miniaturise miniaturize +miniaturised miniaturized +miniaturises miniaturizes +miniaturising miniaturizing +minibuses minibusses +minimise minimize +minimised minimized +minimises minimizes +minimising minimizing +misbehaviour misbehavior +misdemeanour misdemeanor +misdemeanours misdemeanors +misspelt misspelled +mitre miter +mitres miters +mobilisation mobilization +mobilise mobilize +mobilised mobilized +mobilises mobilizes +mobilising mobilizing +modelled modeled +modeller modeler +modellers modelers +modelling modeling +modernisation modernization +modernise modernize +modernised modernized +modernises modernizes +modernising modernizing +moisturise moisturize +moisturised moisturized +moisturiser moisturizer +moisturisers moisturizers +moisturises moisturizes +moisturising moisturizing +moka mocha +monologue monolog +monologues monologs +monopolisation monopolization +monopolise monopolize +monopolised monopolized +monopolises monopolizes +monopolising monopolizing +moralise moralize +moralised moralized +moralises moralizes +moralising moralizing +motorise motorize +motorised motorized +mould mold +moulded molded +moulder molder +mouldered moldered +mouldering moldering +moulders molders +mouldier moldier +mouldiest moldiest +moulding molding +mouldings moldings +moulds molds +mouldy moldy +moult molt +moulted molted +moulting molting +moults molts +moustache mustache +moustached mustached +moustaches mustaches +moustachioed mustachioed +multicoloured multicolored +musicalise musicalize +nationalisation nationalization +nationalisations nationalizations +nationalise nationalize +nationalised nationalized +nationalises nationalizes +nationalising nationalizing +naturalisation naturalization +naturalise naturalize +naturalised naturalized +naturalises naturalizes +naturalising naturalizing +neighbour neighbor +neighbourhood neighborhood +neighbourhoods neighborhoods +neighbouring neighboring +neighbourliness neighborliness +neighbourly neighborly +neighbours neighbors +neutralisation neutralization +neutralise neutralize +neutralised neutralized +neutralises neutralizes +neutralising neutralizing +normalisation normalization +normalise normalize +normalised normalized +normalises normalizes +normalising normalizing +odour odor +odourless odorless +odours odors +oecumenical ecumenical +oedema edema +oesophagus esophagus +oesophaguses esophaguses +oestr- estr- +oestrogen estrogen +offence offense +offences offenses +omelette omelet +omelettes omelets +optimisation optimization +optimisations optimizations +optimise optimize +optimised optimized +optimises optimizes +optimising optimizing +organisation organization +organisational organizational +organisations organizations +organise organize +organised organized +organiser organizer +organisers organizers +organises organizes +organising organizing +orthopaedic orthopedic +orthopaedics orthopedics +ostracise ostracize +ostracised ostracized +ostracises ostracizes +ostracising ostracizing +outmanoeuvre outmaneuver +outmanoeuvred outmaneuvered +outmanoeuvres outmaneuvers +outmanoeuvring outmaneuvering +overemphasise overemphasize +overemphasised overemphasized +overemphasises overemphasizes +overemphasising overemphasizing +oxidisation oxidization +oxidise oxidize +oxidised oxidized +oxidises oxidizes +oxidising oxidizing +paederast pederast +paederasts pederasts +paediatric pediatric +paediatrician pediatrician +paediatricians pediatricians +paediatrics pediatrics +paedophile pedophile +paedophiles pedophiles +paedophilia pedophilia +paeony peony +palaeo- paleo- +palaeolithic paleolithic +palaeontologist paleontologist +palaeontologists paleontologists +palaeontology paleontology +palletise palletize +panelled paneled +panelling paneling +panellist panelist +panellists panelists +paraesthesia paresthesia +paralyse paralyze +paralysed paralyzed +paralyses paralyzes +paralysing paralyzing +parametrisation parametrization +parametrisations parametrizations +parametrise parametrize +parameterisation parameterization +parameterisations parameterizations +parameterise parameterize +parcelled parceled +parcelling parceling +parlour parlor +parlours parlors +particularise particularize +particularised particularized +particularises particularizes +particularising particularizing +passivisation passivization +passivise passivize +passivised passivized +passivises passivizes +passivising passivizing +pasteurisation pasteurization +pasteurise pasteurize +pasteurised pasteurized +pasteurises pasteurizes +pasteurising pasteurizing +patronise patronize +patronised patronized +patronises patronizes +patronising patronizing +patronisingly patronizingly +pedalled pedaled +pedalling pedaling +pedestrianisation pedestrianization +pedestrianise pedestrianize +pedestrianised pedestrianized +pedestrianises pedestrianizes +pedestrianising pedestrianizing +pelletise pelletize +penalise penalize +penalised penalized +penalises penalizes +penalising penalizing +pencilled penciled +pencilling penciling +personalise personalize +personalised personalized +personalises personalizes +personalising personalizing +pharmacopoeia pharmacopeia +pharmacopoeias pharmacopeias +philosophise philosophize +philosophised philosophized +philosophises philosophizes +philosophising philosophizing +philtre filter +philtres filters +phoney phony +plagiarise plagiarize +plagiarised plagiarized +plagiarises plagiarizes +plagiarising plagiarizing +plough plow +ploughed plowed +ploughing plowing +ploughman plowman +ploughmen plowmen +ploughs plows +ploughshare plowshare +ploughshares plowshares +polarisation polarization +polarise polarize +polarised polarized +polarises polarizes +polarising polarizing +politicisation politicization +politicise politicize +politicised politicized +politicises politicizes +politicising politicizing +popularisation popularization +popularise popularize +popularised popularized +popularises popularizes +popularising popularizing +pouffe pouf +pouffes poufs +practise practice +practised practiced +practises practices +practising practicing +praesidium presidium +praesidiums presidiums +pressurisation pressurization +pressurise pressurize +pressurised pressurized +pressurises pressurizes +pressurising pressurizing +pretence pretense +pretences pretenses +preventor preventer +primaeval primeval +prioritisation prioritization +prioritise prioritize +prioritised prioritized +prioritises prioritizes +prioritising prioritizing +privatisation privatization +privatisations privatizations +privatise privatize +privatised privatized +privatises privatizes +privatising privatizing +professionalisation professionalization +professionalise professionalize +professionalised professionalized +professionalises professionalizes +professionalising professionalizing +programme program +programmes programs +proletarianise proletarianize +prologue prolog +prologues prologs +propagandise propagandize +propagandised propagandized +propagandises propagandizes +propagandising propagandizing +proselytise proselytize +proselytised proselytized +proselytiser proselytizer +proselytisers proselytizers +proselytises proselytizes +proselytising proselytizing +psychoanalyse psychoanalyze +psychoanalysed psychoanalyzed +psychoanalyses psychoanalyzes +psychoanalysing psychoanalyzing +publicise publicize +publicised publicized +publicises publicizes +publicising publicizing +pulverisation pulverization +pulverise pulverize +pulverised pulverized +pulverises pulverizes +pulverising pulverizing +pummelled pummel +pummelling pummeled +pyjama pajama +pyjamas pajamas +pzazz pizzazz +quarrelled quarreled +quarrelling quarreling +radicalise radicalize +radicalised radicalized +radicalises radicalizes +radicalising radicalizing +rancour rancor +randomise randomize +randomised randomized +randomises randomizes +randomising randomizing +rationalisation rationalization +rationalisations rationalizations +rationalise rationalize +rationalised rationalized +rationalises rationalizes +rationalising rationalizing +ravelled raveled +ravelling raveling +realisable realizable +realisation realization +realisations realizations +realise realize +realised realized +realises realizes +realising realizing +recognisable recognizable +recognisably recognizably +recognisance recognizance +recognise recognize +recognised recognized +recognises recognizes +recognising recognizing +reconnoitre reconnoiter +reconnoitred reconnoitered +reconnoitres reconnoiters +reconnoitring reconnoitering +refuelled refueled +refuelling refueling +regularisation regularization +regularise regularize +regularised regularized +regularises regularizes +regularising regularizing +remodelled remodeled +remodelling remodeling +remould remold +remoulded remolded +remoulding remolding +remoulds remolds +reorganisation reorganization +reorganisations reorganizations +reorganise reorganize +reorganised reorganized +reorganises reorganizes +reorganising reorganizing +revelled reveled +reveller reveler +revellers revelers +revelling reveling +revitalise revitalize +revitalised revitalized +revitalises revitalizes +revitalising revitalizing +revolutionise revolutionize +revolutionised revolutionized +revolutionises revolutionizes +revolutionising revolutionizing +rhapsodise rhapsodize +rhapsodised rhapsodized +rhapsodises rhapsodizes +rhapsodising rhapsodizing +rigour rigor +rigours rigors +ritualised ritualized +rivalled rivaled +rivalling rivaling +romanticise romanticize +romanticised romanticized +romanticises romanticizes +romanticising romanticizing +rumour rumor +rumoured rumored +rumours rumors +sabre saber +sabres sabers +saleroom salesroom +saltpetre saltpeter +sanitise sanitize +sanitised sanitized +sanitises sanitizes +sanitising sanitizing +satirise satirize +satirised satirized +satirises satirizes +satirising satirizing +saviour savior +saviours saviors +savour savor +savoured savored +savouries savories +savouring savoring +savours savors +savoury savory +scandalise scandalize +scandalised scandalized +scandalises scandalizes +scandalising scandalizing +sceptic skeptic +sceptical skeptical +sceptically skeptically +scepticism skepticism +sceptics skeptics +sceptre scepter +sceptres scepters +scrutinise scrutinize +scrutinised scrutinized +scrutinises scrutinizes +scrutinising scrutinizing +secularisation secularization +secularise secularize +secularised secularized +secularises secularizes +secularising secularizing +sensationalise sensationalize +sensationalised sensationalized +sensationalises sensationalizes +sensationalising sensationalizing +sensitisation sensitization +sensitise sensitize +sensitised sensitized +sensitises sensitizes +sensitising sensitizing +sentimentalise sentimentalize +sentimentalised sentimentalized +sentimentalises sentimentalizes +sentimentalising sentimentalizing +sepulchre sepulcher +sepulchres sepulchers +serialisation serialization +serialisations serializations +serialise serialize +serialised serialized +serialises serializes +serialising serializing +sermonise sermonize +sermonised sermonized +sermonises sermonizes +sermonising sermonizing +sheikh sheik +shovelled shoveled +shovelling shoveling +shrivelled shriveled +shrivelling shriveling +signalise signalize +signalised signalized +signalises signalizes +signalising signalizing +signalled signaled +signalling signaling +sleugh slough +smoulder smolder +smouldered smoldered +smouldering smoldering +smoulders smolders +snivelled sniveled +snivelling sniveling +snorkelled snorkeled +snorkelling snorkeling +snowplough snowplow +snowploughs snowplow +socialisation socialization +socialise socialize +socialised socialized +socialises socializes +socialising socializing +sodomise sodomize +sodomised sodomized +sodomises sodomizes +sodomising sodomizing +solemnise solemnize +solemnised solemnized +solemnises solemnizes +solemnising solemnizing +soliloquise soliloquize +solubilise solubilize +sombre somber +specialisation specialization +specialisations specializations +specialise specialize +specialised specialized +specialises specializes +specialising specializing +spectre specter +spectres specters +spiralled spiraled +spiralling spiraling +splendour splendor +splendours splendors +squirrelled squirreled +squirrelling squirreling +stabilisation stabilization +stabilise stabilize +stabilised stabilized +stabiliser stabilizer +stabilisers stabilizers +stabilises stabilizes +stabilising stabilizing +standardisation standardization +standardise standardize +standardised standardized +standardises standardizes +standardising standardizing +steatorrhoea steatorrhea +stencilled stenciled +stencilling stenciling +sterilisation sterilization +sterilisations sterilizations +sterilise sterilize +sterilised sterilized +steriliser sterilizer +sterilisers sterilizers +sterilises sterilizes +sterilising sterilizing +stigmatisation stigmatization +stigmatise stigmatize +stigmatised stigmatized +stigmatises stigmatizes +stigmatising stigmatizing +stoicheiometry stoichiometry +stylise stylize +subjectivise subjectivize +subsidisation subsidization +subsidise subsidize +subsidised subsidized +subsidiser subsidizer +subsidisers subsidizers +subsidises subsidizes +subsidising subsidizing +suburbanise suburbanize +succour succor +succoured succored +succouring succoring +succours succors +sulphate sulfate +sulphates sulfates +sulphide sulfide +sulphides sulfides +sulphur sulfur +sulphurous sulfurous +summarise summarize +summarised summarized +summarises summarizes +summarising summarizing +swivelled swiveled +swivelling swiveling +symbolise symbolize +symbolised symbolized +symbolises symbolizes +symbolising symbolizing +sympathise sympathize +sympathised sympathized +sympathiser sympathizer +sympathisers sympathizers +sympathises sympathizes +sympathising sympathizing +synaesthesia synesthesia +synchronisation synchronization +synchronise synchronize +synchronised synchronized +synchronises synchronizes +synchronising synchronizing +syntagm syntagma +synthesise synthesize +synthesised synthesized +synthesiser synthesizer +synthesisers synthesizers +synthesises synthesizes +synthesising synthesizing +syphon siphon +syphoned siphoned +syphoning siphoning +syphons siphons +systematisation systematization +systematise systematize +systematised systematized +systematises systematizes +systematising systematizing +tantalise tantalize +tantalised tantalized +tantalises tantalizes +tantalising tantalizing +tantalisingly tantalizingly +tasselled tasseled +technicolour technicolor +temporise temporize +temporised temporized +temporises temporizes +temporising temporizing +tendencious tendentious +tenderise tenderize +tenderised tenderized +tenderises tenderizes +tenderising tenderizing +terrorise terrorize +terrorised terrorized +terrorises terrorizes +terrorising terrorizing +thalassaemia thalassemia +theatre theater +theatregoer theatergoer +theatregoers theatergoers +theatres theaters +theorise theorize +theorised theorized +theorises theorizes +theorising theorizing +tonne ton +tonnes tons +towelled toweled +towelling toweling +toxaemia toxemia +tranquillise tranquilize +tranquillised tranquilized +tranquilliser tranquilizer +tranquillisers tranquilizers +tranquillises tranquilizes +tranquillising tranquilizing +tranquillity tranquility +tranquillize tranquilize +tranquillized tranquilized +tranquillizer tranquilizer +tranquillizers tranquilizers +tranquillizes tranquilizes +tranquillizing tranquilizing +tranquilly tranquility +transistorised transistorized +traumatise traumatize +traumatised traumatized +traumatises traumatizes +traumatising traumatizing +travelled traveled +traveller traveler +travellers travelers +travelling traveling +travelogue travelog +travelogues travelogs +trialled trialed +trialling trialing +tricolour tricolor +tricolours tricolors +trivialise trivialize +trivialised trivialized +trivialises trivializes +trivialising trivializing +tumour tumor +tumours tumors +tunnelled tunneled +tunnelling tunneling +tyrannise tyrannize +tyrannised tyrannized +tyrannises tyrannizes +tyrannising tyrannizing +tyre tire +tyres tires +unauthorised unauthorized +uncivilised uncivilized +underutilised underutilized +unequalled unequaled +unfavourable unfavorable +unfavourably unfavorably +unionisation unionization +unionise unionize +unionised unionized +unionises unionizes +unionising unionizing +unorganised unorganized +unravelled unraveled +unravelling unraveling +unrecognisable unrecognizable +unrecognised unrecognized +unrivalled unrivaled +unsavoury unsavory +untrammelled untrammeled +urbanisation urbanization +urbanise urbanize +urbanised urbanized +urbanises urbanizes +urbanising urbanizing +utilisable utilizable +utilisation utilization +utilise utilize +utilised utilized +utilises utilizes +utilising utilizing +valour valor +vandalise vandalize +vandalised vandalized +vandalises vandalizes +vandalising vandalizing +vaporisation vaporization +vaporise vaporize +vaporised vaporized +vaporises vaporizes +vaporising vaporizing +vapour vapor +vapours vapors +verbalise verbalize +verbalised verbalized +verbalises verbalizes +verbalising verbalizing +victimisation victimization +victimise victimize +victimised victimized +victimises victimizes +victimising victimizing +videodisc videodisk +videodiscs videodisks +vigour vigor +visualisation visualization +visualisations visualizations +visualise visualize +visualised visualized +visualises visualizes +visualising visualizing +vocalisation vocalization +vocalisations vocalizations +vocalise vocalize +vocalised vocalized +vocalises vocalizes +vocalising vocalizing +vulcanisate vulcanizate +vulcanised vulcanized +vulgarisation vulgarization +vulgarise vulgarize +vulgarised vulgarized +vulgarises vulgarizes +vulgarising vulgarizing +waggon wagon +waggons wagons +watercolour watercolor +watercolours watercolors +weaselled weaseled +weaselling weaseling +westernisation westernization +westernise westernize +westernised westernized +westernises westernizes +westernising westernizing +womanise womanize +womanised womanized +womaniser womanizer +womanisers womanizers +womanises womanizes +womanising womanizing +woollen woolen +woollens woolens +woollies woolies +woolly wooly +worshipped worshiped +worshipper worshiper +worshipping worshiping +yodelled yodeled +yodelling yodeling +yoghourt yogurt +yoghourts yogurts +yoghurt yogurt +yoghurts yogurts diff --git a/language/generate.fish b/language/generate.fish new file mode 100644 index 0000000..f207483 --- /dev/null +++ b/language/generate.fish @@ -0,0 +1,38 @@ +#!/usr/bin/env fish + +: ' + ;; Run these in a REPL + (require auto-rename) + (require (transform-in + racket #:tx + (lambda (rf) + (define coll (mutable-set)) + (case-lambda + [(im/ex acc) + (for ([name (in-list (regexp-match* #rx"[A-Za-z]+" (im/export-name im/ex)))]) + (set-add! coll name)) + (rf im/ex acc)] + [(acc) + (with-output-to-file "stdlib-words.tsv" + (lambda () + (displayln (string-join (sort (set->list coll) string stdlib-words.$lang.tsv + end +end + +function atr_collate + awk '{print $1}' stdlib-words.tsv > stdlib-words.en.tsv + paste -d '\t' stdlib-words.en.tsv stdlib-words.$LANGS.tsv > stdlib-words.tsv + rm stdlib-words.en.tsv +end diff --git a/language/polyglot.rkt b/language/polyglot.rkt new file mode 100644 index 0000000..065ab35 --- /dev/null +++ b/language/polyglot.rkt @@ -0,0 +1,53 @@ +#lang racket/base + +(require (for-syntax racket/base racket/string) + "../main.rkt") + +(provide en-français + auf-deutsch + magyarul) + +(begin-for-syntax + (require racket/runtime-path) + (define-logger polyglot) + + (define-runtime-path table-path "stdlib-words.tsv") + (define tsv-data + (call-with-input-file* table-path + #:mode 'text + (λ (ic) + (for/hash ([line (in-lines ic)]) + (define vals (string-split line "\t")) + (values (car vals) + (apply vector-immutable (cdr vals))))))) + + (define ((map-words lang-code column) name) + (cond + [(string-prefix? name "#%") name] + [else + (define translated + (regexp-replace* + #rx"[a-zA-Z]+" name + (λ (word) + (define translated (hash-ref tsv-data word #f)) + (cond + [translated + (vector-ref translated column)] + [else word])))) + (log-polyglot-debug "~a -[~a]> ~a" name lang-code translated) + translated]))) + +(define-syntax en-français + (make-auto-rename-transformer + (tx/map (map-words 'fr 0)) + (tx/disambiguate))) + +(define-syntax auf-deutsch + (make-auto-rename-transformer + (tx/map (map-words 'de 1)) + (tx/disambiguate))) + +(define-syntax magyarul + (make-auto-rename-transformer + (tx/map (map-words 'hu 2)) + (tx/disambiguate))) diff --git a/language/stdlib-words.tsv b/language/stdlib-words.tsv new file mode 100644 index 0000000..a4452c9 --- /dev/null +++ b/language/stdlib-words.tsv @@ -0,0 +1,1034 @@ +a un a a +abandon abandonner aufgeben elhagy +abbreviate abréger abkürzen rövidít +abbreviations abréviations abkürzungen rövidítések +abort avorter abbrechen megszakít +abs abs abs abszolút +absent absent abwesend hiányzó +absolute absolu absolute abszolút +abstract abstrait abstrakt absztrakt +accept accepter akzeptieren elfogad +accepts accepter akzeptiert elfogadja +accessor accessoire accessor kiegészítő +accounting comptabilité buchhaltung számvitel +acos acos acos acos +acquire acquérir erwerben szerez +add ajouter hinzufügen hozzáad +addresses adresses adressen címek +adjusted ajusté angepasst beállított +adjuster ajusteur einsteller beállító +after après nach után +alarm alarme alarm riasztás +all tous alle minden +allow permettre erlauben megenged +allowed autorisé erlaubt megengedett +alphabetic alphabétique alphabetisch ábécé +always toujours stets mindig +anchor ancre anker horgony +and et und és +andmap et-fouiller und-map és-megemelés +angle angle winkel szög +any n'importe-lequel beliebig bármilyen +app appliquer app alkalmazás +append ajouter anhängen mellékel +application application anwendung alkalmazás +apply appliquer anwenden alkalmaz +arg arg arg érvelés +arglist argli arglist arglist +argmax argmax argmax argmax +argmin argmin argmin argmin +argument argument argument érv +arguments arguments argumente érvek +arithmetic arithmétique arithmetik számtani +arity aité arity világosság +arm bras arm kar +arrow flèche pfeil nyíl +as comme als mint +asin asin asin szamár +assert affirmer behaupten állít +assertion affirmation behauptung állítás +assf assf assf seggfej +assoc association assoc munkatárs +assq assq assq szamár +assv assv assv asm--asm +assw assw assw szamár +async asynchrone asynchron aszinknc +at à bei -kor +atan atan atan atán +atomic atomique atomic atom +attach attacher befestigen ragaszt +augment augmenter erweiterung növel +augride augroïser augride kacsa +authentic authentique authentisch hiteles +avail profiter nutzen haszon +available disponible verfügbar elérhető +bad mauvais schlecht rossz +banner bannière banner transzparens +bar bar bar bár +barrier barrière barriere akadály +bars bars barren rúd +base base base bázis +be être sei létezik +before avant vor előtt +begin commencer beginnen kezdődik +between entre zwischen között +big grand groß nagy +bind lier binden kötődik +binding obligatoire bindung kötelező +bit peu bisschen bit +bits bits bits bitek +bitwise dans-le-monde bitweise bit-módon +blame blâmer beschuldigen hibás +blank vide leer üres +block bloc block tömb +body corps körper test +boolean booléen boolean logikai +bound lié gebunden köteles +boundary limite grenze határ +box boîte kasten doboz +brace entretoise befestigen merevítő +braces croisillons zahnspange fogszabályozó +bracket support klammer zárójel +break casser brechen szünet +buffer tampon puffer puffer +build construire bauen épít +by par von által +byte octet byte byte +bytes octets bytes bájt +c c c c +caaaar caaaar caaaar caaaar +caaadr caaadr caaadr caaadr +caaar caaar caaar caaar +caadar caadar caadar kaadari +caaddr caaddr caaddr caaddr +caadr caadr caadr kaadr +caar caar caar caar +cache cache cache gyorsítótár +cadaar cadaar cadaar cadaár +cadadr cadadr cadadr kádadr +cadar cadar cadar kádar +caddar caddar caddar caddar +cadddr cadddr cadddr cadddr +caddr caddr caddr caddr +cadr cadr kader kádr +call appel anruf hívás +can peut dürfen tud +cancel annuler stornieren töröl +capture capturer erfassen elfog +car voiture auto autó +cartesian cartésien kartesischer kartéziánus +cas ch cas cas +case cas fall ügy +category catégorie kategorie kategória +cc cc cc cc +cd cd cd cd +cdaaar cdaaar cdaaar cdaaar +cdaadr cdaadr cdaadr cdaadr +cdaar cdaar cdaar cdaar +cdadar cdadar cdadar cdadar +cdaddr cdaddr cdaddr cdaddr +cdadr cdadr cdadr cdadr +cdar cdar cdar cdar +cddaar cddaar cddaar cddaar +cddadr cddadr cddadr cddadr +cddar cddar cddar cddar +cdddar cdddar cdddar cdddar +cddddr cddddr cddddr cddddr +cdddr cdddr cdddr cdddr +cddr cddr cddr cddr +cdot cdot cdot cdot +cdr cdr cdr cdr +ceiling plafond decke mennyezet +cell cellule zelle sejt +certifier certificateur zertifizierer tanúsító +change changement ändern változás +channel canal kanal csatorna +chaperone chaperon begleiter chaperone +char carboniser verkohlen csészék +character personnage charakter jellegzetesség +chars charbon chars chars +check vérifier überprüfen ellenőrzés +checked à-carreaux überprüft ellenőrzött +checking vérification überprüfung ellenőrzés +choice choix auswahl választás +choose choisir wählen választ +ci ci ci ci +class classe klasse osztály +clause clause klausel záradék +cleanse purifier reinigen tisztít +clear clair klar világos +close fermer schließen közeli +closed fermé geschlossen zárt +closure fermeture schließung bezárás +code code code kód +coerce contraindre zwingen kényszerít +collect collecter sammeln gyűjt +collection collection sammlung gyűjtemény +column colonne spalte oszlop +columns colonnes spalten oszlopok +combinations combinaisons kombinationen kombinációk +combine combiner kombinieren kombájn +command commande befehl parancs +comment commentaire kommentar megjegyzés +commit commettre begehen elkövet +common commun gemeinsam közös +compile compiler kompilieren összeállít +compiled compilé zusammengestellt összeállított +compiling compilation kompilieren összeállított +complete complet vollständig teljes +complex complexe komplex összetett +composable composable komponierbar összeállítható +compose composer komponieren összeállít +compound composé verbindung összetett +concurrent concurrent gleichzeitig egyidejű +cond faire kond cond +configuration configuration konfiguration konfiguráció +conjoin conjoinger verbinden összekapcsol +conjugate conjuguer konjugieren konjugál +connect connecter verbinden összekapcsol +connected connecté verbunden összekapcsolt +cons inconvénients nachteile hátrányok +const const const higgadt +constant constante konstante állandó +constants constantes konstanten állandóak +constructor constructeur konstruktor konstruktőr +cont suite fortsetzung folytatás +contains contient enthält tartalmaz +content contenu inhalt tartalom +contents contenu inhalt tartalom +context contexte kontext kontextus +contexts contextes kontexte kontextus +continuation continuation fortsetzung folytatás +contract contracter vertrag szerződés +contracted contracté vertrag szerződéses +contracts contractes verträge szerződések +control contrôle kontrolle ellenőrzés +convention convention konvention konvenció +convert convertir konvertieren megtérít +converter convertisseur konverter átalakító +copy copie kopie másolat +cos cos cos kötözősaláta +cosh matraque cosh bunkó +count compter zählen számítás +country pays land ország +counts comptes zählt számít +cross croix kreuzen kereszt +ctc ctc ctc ctc +curly bouclé lockig göndör +current actuel aktuell jelenlegi +curry curry curry curry +curryr curryr curryr curryr +custodian gardien depotbank gondnok +custom coutume brauch szokás +cycle faire-du-vélo zyklus ciklus +d d d d +date date datum dátum +datum données datum alapvető +day jour tag nap +dc dc dc dc +dead mort tot halott +debug déboguer debuggen hibakeresés +decimal décimal dezimal decimális +declaration déclaration erklärung nyilatkozat +declare déclarer erklären kijelent +declared déclaré erklärt bejelentett +default défaut standard mulasztás +define définir definieren meghatároz +defined défini definiert meghatározott +definition définition definition meghatározás +degrees degrés grad fokok +delay retard verzögerung késleltetés +delete supprimer löschen töröl +delta delta delta delta +demand demande nachfrage kereslet +denominator dénominateur nenner nevező +depend dépendre abhängen függ +depth profondeur tiefe mélység +derived dérivé abgeleitet származtatott +descriptors descripteurs deskriptoren leírók +deserialize désérialiser deserialisieren drasztérít +device appareil gerät eszköz +dict diction dict dict +difference différence unterschied különbség +directory annuaire verzeichnis könyvtár +disarm désarmer entwaffnen lefegyverez +disjoin séparer trennen szétválaszt +display afficher anzeige kijelző +displayln affichage displayln displayln +distinct distinct unterscheidbar különböző +divide diviser teilen megoszt +dm dm dm dm +do faire tun csinál +dom dom dom dom +domain domaine domain domain +doms doms doms doms +dot point punkt pont +double double doppelt kettős +doubling doubler verdoppelung megduplázódás +down vers-le-bas runter le- +downcase dans-la-baisse downlos lefelé-irányít +drive conduire fahren hajtás +drop baisse fallen csepp +dropf dropf dropf csepp +dst dst dst dst +dump décharge entsorgen dump +dup dup dup dup +duplicate double duplikat másolat +duplicates doublure duplikate másolatok +dynamic dynamique dynamisch dinamikus +e e e e +each chaque jede minden +ec ce ec ek +eighth huitième achte nyolcadik +element élément element elem +elements éléments elemente elemek +eleventh onzième elfte tizenegyedik +else autre anders más +empty vide leer üres +enable activer aktivieren engedélyez +enabled activé ermöglicht engedélyezve +encoding codage codierung kódolás +end fin ende vége +endian endian endian endiai +enforce imposer erzwingen érvényesít +env env env env +environment environnement umfeld környezet +eof eof eof földhálózat +ephemeron éphémère ephemeron efemeron +eprintf eprintf eprintf eprintf +eq égaliseur gl egyenérték +equal égal gleich egyenlő +equality égalité gleichwertigkeit egyenlőség +equivalent équivalent gleichwertig egyenértékű +eqv eqv eqv egyenérték +errno errer errno errno +error erreur fehler hiba +escape s'échapper flucht menekülés +eval évaluer bewerten értékel +even même sogar még +evt evt evt evt +evts évolution evts evts +exact exact genau pontos +exactly exactement genau pontosan +except sauf außer kivéve +exception exception ausnahme kivétel +executable exécutable ausführbar végrehajtható +execute exécuter ausführen végrehajt +executor exécuteur testamentsvollstrecker végrehajtó +exercise exercice übung gyakorlat +exists existant existiert létezik +exit sortie ausfahrt kijárat +exn exn exn exn +exp exp exp exp +expand développer expandieren kiszélesít +expander extenseur expander kiterjesztő +expansion expansion erweiterung terjeszkedés +explanation explication erläuterung magyarázat +explode exploser explodieren felrobban +export exporter export export +exports exportations exporte export +expression expression ausdruck kifejezés +exprs exprs exprs kiállítás +expt expt expt kitett +extend étendre verlängern kiterjeszt +extended étendu erweitert kiterjedt +extends prolongement erstreckt-sich kiterjeszt +extension extension verlängerung kiterjesztés +externalizable externalisable externalisierbar kiléphető +extract extrait extrakt kivonat +f f f f +fail échouer scheitern kudarcot-vall +failure échec versagen hiba +false faux falsch hamis +fatal fatal tödlich halálos +field champ feld mező +fifo fifo fifo fifo +fifteenth quinzième fünfzehnte tizenötödik +fifth cinquième fünfte ötödik +file déposer datei irat +filename nom-de-fichier dateiname fájlnév +files fichiers dateien irat +filesystem système-de-fichiers dateisystem fájlrendszer +fill remplir füllen kitölt +filter filtre filter szűrő +final final finale végső +find trouver finden lelet +findf findf findf findf +first d'abord erste első +fixnum dume-de-fixation fixnum fixnum +flat plat wohnung lakás +flatten aplatir flach lelapul +floating flottant schwebend úszó +flonum flonum flonum csábító +floor sol boden emelet +flush flush spülen eláraszt +fmt fmt fmt fmt +fold pli falten hajtogat +foldcase maltraire foldcase robbantás +foldl se-dresser falten összecsukható +foldr pli fordr hajtás +for pour für -ra +force forcer gewalt erő +forced forcé gezwungen kényszerű +form formulaire bilden forma +format format format formátum +fourteenth quatorzième vierzehnte tizennegyedik +fourth quatrième vierte negyedik +fprintf fprintf fprintf fprintf +free gratuit frei ingyenes +from depuis aus -tól +fsemaphore fsémaphore fsemaphor fsemaphore +functional fonctionnel funktional funkcionális +future avenir zukunft jövőbeli +futures avenir futures határidős-ügylet +garbage ordures müll szemét +gc gc gc gc +gcd gcd gcd gcd +gen génération gen gen +general général allgemein általános +generate générer erzeugen előállít +generator générateur generator generátor +generic générique generisches általános +gensym gensym gensym gensim +get obtenir erhalten kap +getenv getenv getenv getenv +global mondial global globális +graph graphique graph grafikon +grapheme graphème graphem graféma +graphic graphique grafik grafikus +group groupe gruppe csoport +guard garde bewachen őr +handle poignée handhaben fogantyú +handler maître handler kezelő +handlers gestionnaires handler kezelők +hang accrocher aufhängen akasztás +has a hat van +hash hacher hash hash +hashalw hashalw hashalw hasfás +hasheq haschische hasheq hasheq +hasheqv haschische hasheqv hasheqv +hook crochet haken horog +hour heure stunde óra +i je ich én +id identifiant ausweis személyazonosság +identifier identifiant kennung azonosító +identifiers identificateurs kennungen azonosítók +identity identité identität identitás +idle inactif leerlauf tétlen +if si wenn ha +imag imaginer bild képalkotó +immediate immédiat sofort azonnali +immutable immuable unveränderlich változhatatlan +immutableof immuable unveränderlich változhatatlan +impersonate imiter imitieren megszemélyesít +impersonator imitateur imitator megszemélyesítő +implementation mise-en-œuvre durchführung végrehajtás +implements outils geräte eszközök +implies implique impliziert --- +import importer import behozatal +imports importations importe behozatal +in dans in -ben +include inclure enthalten tartalmaz +includes comprend inklusive magában-foglal +inclusive compris inklusiv befogadó +index indice index index +indexed indexé indiziert indexelt +indexes index indizes indexek +indirect indirect indirekt közvetett +inexact inexact ungenau pontatlan +inexactness inexactitude ungenauigkeit pontatlanság +infer déduire schließen következtet +infinite infini unendlich végtelen +infix inspirer infix behelyez +info informations info információ +inherit hériter erben örököl +init init init kezdeményezés +initial initial anfänglich kezdeti +initiate initié einleiten beavatott +inner intérieur innere belső +input saisir eingang bemenet +inspect inspecter überprüfen megvizsgál +inspector inspecteur inspektor ellenőr +installation installation installation telepítés +instanceof instance-de instanz példány +instantiate instancier instanziieren jelentkezik +integer entier ganze-zahl egész-szám +interaction interaction interaktion kölcsönhatás +interface interface schnittstelle felület +intern interne praktikum szakember +internal interne intern belső +interned interné interniert interzált +intersect couper schneiden keresztez +introduce introduire einführen bemutat +introducer introducteur einführer bevezető +invariant invariant invariant állandó +invoke invoquer aufrufen meghív +ior ior ior ior +is est ist az +iso iso iso izo +iter iter iter iter +iterate répéter iterieren hajtogat +iterator itérateur iterator iterátor +jit jit jit jit +join rejoindre verbinden csatlakozik +keep garder halten megtart +key clé schlüssel kulcsfontosságú +keys clés schlüssel kulcsok +keyword mot-clé stichwort kulcsszó +keywords mots-clés schlüsselwörter kulcsszavak +kill tuer töten megöl +known connu bekannt ismert +label étiquette etikett címke +lambda lambda lambda lambda +lang égouter lang lang +language langue sprache nyelv +last dernier zuletzt utolsó +late en-retard spät késő +latin latin lateinisch latin +lazy paresseux faul lusta +lcm lcm lcm lcm +least moins am-wenigsten legkevésbé +leave partir verlassen szabadság +legacy héritage vermächtnis örökség +len len len len +length longueur länge hossz +let laisser lassen enged +letrec letdrec letrec letrec +level niveau ebene szint +levels niveaux ebenen szint +lexical lexical lexikalisch lexikális +lib lib lib lib +liberal libéral liberale liberális +library bibliothèque bibliothek könyvtár +lift ascenseur aufzug lift +lifts ascenseurs aufzüge felvonók +limit limite limit határ +limited limité beschränkt korlátozott +line doubler linie vonal +lines lignes linien vonal +link lien link link +links links links linkek +list liste liste lista +listen écouter hören hallgat +listener auditeur hörer hallgató +listof liste liste felsorol +lists listes listen listák +literal littéral wörtlich szó-szerinti +load charger laden terhelés +loc localiser loc lokál +local locale lokal helyi +locale lieu gebietsschema helyszín +location emplacement standort elhelyezkedés +lock verrouillage sperren zár +locked fermé verschlossen bezárt +log enregistrer protokoll fatörzs +logger bûcheron logger fakitermelő +long long lang hosszú +lookbehind lookbehind schauen kinézet +loop boucle schleife hurok +loopback boucler loopback visszacsatolás +lower inférieur untere alacsonyabb +m m m m +machine machine maschine gép +macros macros makros makrók +magnitude ampleur größe nagyságrend +make faire machen készít +managed géré verwaltet kezelt +map carte karte térkép +mapped cartographié zugeordnet feltérképezett +mapping cartographie abbildung feltérképezés +mark marque markieren mark +marks marques markierungen jelek +mask masque maske maszk +match correspondre übereinstimmen mérkőzés +matches matchs übereinstimmungen mérkőzések +max max max maximum +mcar mcar mcar mcar +mcdr mcdr mcdr mcdr +mcons mordons mcons mcons +member membre mitglied tag +memf memf memf memó +memory mémoire erinnerung emlékezet +memq memq memq memq +memv memv memv memórt +memw memw memw memw +merge fusionner verschmelzen összeolvad +message message nachricht üzenet +meta méta meta meta +method méthode verfahren módszer +milliseconds millisecondes millisekunden milliszekundum +min min min miniszterelnök +minute minute minute perc +misc mission miser zaklató +mismatch décalage nichtübereinstimmung eltérés +missing manquant fehlen hiányzó +mixin mélanger mischen keverék +mlist mlist mlist mlist +mode mode modus mód +modify modifier ändern módosít +module module modul modul +modulo modulo modulo moduló +monotonic monotone monoton monoton +month mois monat hónap +mpair député mpair mpair +multicast multidiffusion multicast multy--out +murec assouplir murec murec +mutable mutable veränderlich változékony +mutator mutateur mutator mutátor +n n n n +nack nack nack csípős +name nom name név +named nommé namens elnevezett +names noms namen nevek +namespace espace-de-noms namespace névtér +nan nan nan nan +nand nand nand nand +nanosecond nanoseconde nanosekunde nanosekundum +natural naturel natürlich természetes +naturals naturels naturals természetes +neg neg neg neg +negate nier negieren tagad +negative négatif negativ negatív +nested imbriqué verschachtelt beágyazott +nesting nichage nisten fészkelés +network réseau netzwerk hálózat +never jamais niemals soha +new nouveau neu új +newline newline newline újvonal +next suivant nächste következő +nfc nfc nfc nfc +nfd nfd nfd nfd +nfkc nfkc nfkc nfkc +nfkd nfkd nfkd nfkd +ninth neuvième neunte kilencedik +no non nein nem +non non nicht nem +none aucun keiner egyik-sem +nonnegative non-négatif nicht-negativ nemnegatív +nonpositive non-positif nicht-positiv nem-pozitív +nor ni noch sem +normal normale normal normál +normalize normaliser normalisieren nimalizál +normalized normalisé normalisiert normalizált +not pas nicht nem +nowhere nulle-part nirgends sehol +nth n nth n--szer +null nul null nulla +nuls nuls nulle nuls +number nombre nummer szám +numerator numérateur zähler számológép +numeric numérique numerisch numerikus +object objet objekt objektum +odd impair seltsam páratlan +of de von -y--az +offset compenser offset ellensúlyozás +on sur an -on +once une-fois einmal egyszer +one un eins egy +only seulement nur csak +open ouvrir offen nyitott +opt opter opt dönt +or ou oder vagy +orc orc ork ork +order commande befehl rendelés +origin origine herkunft származás +original original original eredeti +ormap ormap ormap beolvasás +other autre andere más +out dehors aus ki +output sortir ausgabe kibocsátás +overment excès überschließung legyőz +override outrepasser überschreiben felülbírál +pair paire paar pár +pairs couple paare párok +parallel parallèle parallel párhuzamos +parameter paramètre parameter paraméter +parameterization paramétrage parametrisierung paraméterezés +parameterize paramétrer parametrize paraméterez +parametric paramétrique parametrisch paraméteres +paren parin pfarrer paren +parent mère elternteil szülő +parse analyse analysieren elemez +part partie teil rész +partition partition trennwand partíció +party faire-la-fête party fél +passes col pässe átesik +path chemin weg útvonal +pathlist pathlist pfadliste pályalista +paths chemins wege utak +pattern modèle muster mintázat +peek jeter-un-coup-d'œil spähen kandikál +peeked jeté-un-coup-d'œil angeregt bepillantott +peeking coup-de-pilement pinkeln bepillantás +peer pair peer társas +performance performance leistung teljesítmény +permission autorisation erlaubnis engedély +permissions autorisation berechtigungen engedély +permutations permutations permutationen permutációk +persistent persistant hartnäckig kitartó +phantom fantôme phantom fantom +phase phase phase fázis +phases phases phasen fázisok +pi pi pi pi +pictographic pictographique piktografisch piktográfiai +pid piquer pid poar +pipe tuyau rohr cső +place lieu ort hely +placeholder espace-réservé platzhalter helyőrző +plain plaine schmucklos egyszerű +planet planète planet bolygó +plumber plombier klempner vízvezeték-szerelő +point indiquer punkt pont +polar polaire polar- poláris +poll sondage umfrage szavazás +port port hafen kikötő +portal portail portal portál +ports ports ports kikötők +pos point-de-point pos pozíció +position position position pozíció +positions positions positionen helyzet +positive positif positiv pozitív +post poste post oszlop +pre pré vor előtti +predefined prédéfini vordefiniert előre-meghatározott +predicate prédicat prädikat állítmány +prefab préfabriqué prefab előreszelepel +preference préférence präferenz kedveltség +preferences préférences vorlieben preferenciák +prefix préfixe präfix előtag +pregexp pregexp vorgegründet pregexp +preservation préservation erhaltung megőrzés +preserved conservé konserviert konzervált +pretty joli hübsch szép +primitive primitif primitive primitív +print imprimer drucken nyomtatás +printable imprimable druckbar nyomtatható +printf printf printf printf +printing impression drucken nyomtatás +println println println println +private privé privat magán +proc procure proc proc +procedure procédure verfahren eljárás +process processus verfahren folyamat +processor processeur prozessor processzor +producer producteur produzent termelő +product produit produkt termék +progress progrès fortschritt előrehalad +proj proj proj proj +projection projection vorsprung vetítés +promise promesse versprechen ígéret +prompt rapide prompt gyors +prop soutenir stütze támaszt +proper approprié richtig megfelelő +property propriété eigentum ingatlan +protect protéger schützen véd +protected protégé geschützt védett +provide fournir bieten biztosít +provides proposer bietet biztosít +prune élaguer prune szilva +pseudo pseudo pseudo- ál +public publique öffentlich nyilvános +pubment publage tafel kifogás +punctuation ponctuation interpunktion központozás +put mettre setzen elhelyez +putenv purtenv putenv putenv +quasiquote quasi-biote quaquote kváziquote +quasisyntax quasisyntax quasisyntax kvázisntax +quotable citant zitierbar idézhető +quote citation zitat idézet +quotient quotient quotient hányados +r r r r--tól +radians radians radians radián +raise augmenter erheben emel +random aléatoire zufällig véletlen +range gamme reichweite hatótávolság +rational rationnel rational racionális +rationalize rationaliser rationalisieren ésszerűsít +read lire lesen olvas +reader lecteur leser olvasó +reading en-lisant lektüre olvasás +readtable lecture lachtbar elolvasható +ready prêt bereit kész +real réel real igazi +realm royaume reich birodalom +rearm réarmer wiederherstellen újjáépít +rec récolte rec eljegyzés +receive recevoir erhalten kap +receiver récepteur empfänger vevő +recertify recertifier rezertifizieren újra-igazol +recompile recompiler neu-kompilieren összegyűjt +recontract réorganeron wiedervertrag felújítás +rectangular rectangulaire rechteckig négyszögletes +recur se-reproduire wiederkehren megismétlődik +recursive récursif rekursiv rekurzív +reduce réduire reduzieren csökkent +reencode réencoder neu-cencode újrakender +ref référence ref ref +reference référence referenz referencia +regexp regexp regexp regexp +region région region régió +register registre registrieren nyilvántartás +registry enregistrement registrierung iktató-hivatal +regular régulier regulär szabályos +relative relatif relativ relatív +release libérer freigeben szabadon-bocsátás +relocate déménager umziehen áthelyez +remainder reste rest maradék +remap remap remap átgondol +remf remf remf remf +remove retirer entfernen eltávolítás +remq remq remq remq +remv remv remv remv +remw remw remm réz +rename rebaptiser umbenennen átnevez +replace remplacer ersetzen cserél +replaced remplacé ersetzt cserélt +replaces remplace ersetzt helyettesít +require exiger erfordern megkövetel +required requis erforderlich kívánt +reroot relâcher erneutoot újracsinál +resolve résoudre lösen elhatározás +resolved résolu gelöst elhatározott +resolver résolveur resolver feloldó +rest repos ausruhen pihenés +result résultat ergebnis eredmény +results résultats ergebnisse eredmény +resume cv wieder-aufnehmen önéletrajz +reverse inverse umkehren fordított +rewind rembobiner zurückspulen visszatekercs +right droite rechts jobbra +rngs rng rngs rngs +root racine wurzel gyökér +roots racines wurzeln gyökerek +round rond runden kerek +rule règle regel szabály +rules règles regeln szabályok +running en-cours-d'exécution läuft futás +s s s s +scope portée umfang hatókör +scopes portées bereiche hatókör +seal joint siegel pecsét +sealed scellé versiegelt zárt +search recherche suchen keresés +second deuxième zweite második +secondary secondaire sekundär másodlagos +seconds secondes sekunden másodpercek +security sécurité sicherheit biztonság +seed graine samen mag +semaphore sémaphore semaphor szemafor +send envoyer schicken elküld +sensitive sensible empfindlich érzékeny +sequence séquence sequenz sorrend +sequences séquences sequenzen szekvenciák +serializable sérialisable serialisierbar sorozható +serialize sérialiser serialisieren sorozatosít +set ensemble satz készlet +setalw setalw setalw setalw +seteq seteq seteq seteq +seteqv seteqv seteqv seteqv +seventh septième siebte hetedik +sgn sgn sgn sgn +sha sha sha sha +shadower ombre schatten követő-hajó +shared commun geteilt megosztott +shell coquille hülse héj +shift changement schicht váltás +show montrer zeigen megmutat +shrink rétrécir schrumpfen összezsugorodik +shuffle mélanger shuffle keverés +shut fermer schließen bezár +shutdown fermer abschalten leállítás +sibling frère-et-sœur geschwister testvér +signature signature unterschrift aláírás +simple simple einfach egyszerű +simplify simplifier vereinfachen egyszerűsít +sin péché sünde bűn +single célibataire einzel egyetlen +sinh sinh sinh sinh +sixth sixième sechste hatodik +size taille größe méret +skip sauter überspringen kihagyás +sleep dormir schlafen alvás +slice tranche scheibe szelet +socket douille buchse foglalat +some quelques manche néhány +sort trier sortieren fajta +source source quelle forrás +space espace raum tér +spaces espaces räume hely +span portée spanne tartósság +special spécial besonders különleges +specialize spécialiser spezialisiert specializál +specials spéciaux specials különlegesség +specific spécifique spezifisch különleges +splice épissure spleißen összeszerel +splicing épissage spleißen illesztés +split diviser teilt hasított +splitf splitf splitf splitf +sqr sqr sqr sqr +sqrt sqrt sqrt sqrt +square carré quadrat négyzet +srcloc srcloc srcloc srcloc +srclocs srclocs srclocs srclocs +stack empiler stapel halom +stash planque versteck biztos-helyre-eltesz +stat stat stat stat +stats statistiques statistiken statisztika +status statut status állapot +stencil pochoir schablone stencil +step étape schritt lépés +sticky collant klebrig ragadós +stop arrêt stoppen stop +stratified stratifié geschichtet rétegelt +stream flux strom folyam +strict strict strikt szigorú +string chaîne saite húr +strong fort stark erős +stronger plus-fort stärker erősebb +struct structure struktur struktúra +stylable stylable stilbar stilezhető +style style stil stílus +sub sous sub alatti +subbytes subbytes subbytes subbytes +subclass sous-classe unterklasse alosztály +subcontracts sous-traitants unteraufträge alvállalkozói-szerződések +subexpression sous-expression unterexpression alexpresszió +submod sous-compteur submod szubmod +submodule sous-module submodul almodula +submodules sous-modules submodules almodulok +subpath sous-chemin unterweg alvonal +subprocess sous-processus subprozess feldolgozás +subset sous-ensemble teilmenge részhalmaz +substring sous-chaîne substring aljzat +subtract soustraire subtrahieren kivon +suffix suffixe suffix suffix +suggest suggérer vorschlagen javaslat +sum somme summe összeg +super super super szuper +superior supérieur vorgesetzter felsőbbrendű +suspend suspendre aussetzen felfüggeszt +swap échanger tauschen csere +swapped échangé getauscht cserélt +symbol symbole symbol szimbólum +symbolic symbolique symbolisch szimbolikus +symbols symboles symbole szimbólumok +symmetric symétrique symmetrisch szimmetrikus +sync synchronisation synchronisation szinkronizál +syntax syntaxe syntax szintaxis +syntaxes syntaxes syntaxe szintaxisok +system système system rendszer +table tableau tisch táblázat +tag étiqueter etikett címke +tail queue schwanz farok +taint entacher verderben megfertőz +tainted entaché verdorben szennyezett +take prendre nehmen vesz +takef takef takef vétel +tan tanné bräunen cserszínű +tanh tanh tanh tanh +target cible ziel cél +tcp tcp tcp tcp +template modèle vorlage sablon +temporaries temporaires zeiträume ideiglenes +temporary temporaire vorübergehend ideiglenes +tentative provisoire vorläufig kísérleti +tenth dixième zehntel tizedik +terminal terminal terminal terminál +terminate mettre-fin beenden befejez +test test prüfen teszt +th ème th th +the le die a +third troisième dritte harmadik +thirteenth treizième dreizehnte tizenharmadik +this ce das ez +thread fil faden szál +thunk faire-vibrer thunk dobog +time temps zeit idő +timeout temps-mort time-out időkorlát +title titre titel cím +titlecase titlecase titlecase titokzatos +to à zu -hoz +top haut spitze felső +touch touche berühren érintés +track piste schiene pálya +transfer transfert überweisen átruházás +transformer transformateur transformator transzformátor +transforming transformant verwandeln átalakító +transplant transplanter transplantation átültetés +treelist treillis dreier treelista +trim garniture trimmen vágás +true vrai wahr igaz +truncate tronquer kürzen csonkít +try essayer versuchen megpróbál +ttl ttl ttl ttl +twelfth douzième zwölfte tizenkettedik +type taper typ beír +types types typen típus +udp udp udp udp +unbound non-lié ungebunden nem-kötött +unbox se-débrouiller unbox kidobás +uncaught non-cinglé ungekunden nemesett +unconstrained non-contraint nicht-eingeschränkt nem-korlátozott +undefine indéfinir undefin meghatároz +undefined indéfini undefiniert meghatározatlan +uninterned sans-interruption deinnen nem-térbeli +union union union unió +unit unité einheit egység +unknown inconnu unbekannt ismeretlen +unless sauf-si es-sei-denn hacsak-nem +unlock ouvrir entsperren kinyit +unprotect non-protégée ungeschützt védett +unquote fin-de-citation nicht-quote idézőjelet-bezár +unquoted sans-vous nicht-zeigten nem-idézett +unreachable inaccessible unerreichbar elérhetetlen +unreadable illisible unleserlich olvashatatlan +unroll dérouler abrollen legöngyöl +unsafe dangereux unsicher veszélyes +unseal desceller entsiegeln felbont +unspecified indéterminé nicht-spezifiziert meghatározatlan +unsupplied non-supplié nicht-unterstützt nem-támogatott +unsupported non-pris-en-charge nicht-unterstützt nem-támogatott +unsyntax unyntax unsyntax sysyntax +up en-haut hoch fel +upcase casse-tête oben felgyorsít +update mise-à-jour aktualisieren frissít +upper supérieur obere felső +use utiliser verwenden használat +user utilisateur benutzer felhasználó +utf utf utf utf +v v v v +val val val vall +value valeur wert érték +values valeurs werte értékek +variable variable variable változó +variables variables variablen változók +vector vecteur vektor vektor +vectorof vectorof vectorof vektoros +version version version változat +void vide leere üres +wait attendez warten várjon +waiting en-attendant warten várakozás +warning avertissement warnung figyelmeztetés +weak faible schwach gyenge +week semaine woche hét +when quand wann amikor +where où wo ahol +whitespace espace-blanc whitespace szóköz +width largeur breite szélesség +will volonté wille akarat +wind vent wind szél +with avec mit -vel +without sans ohne nélkül +would serait würde lenne +wrap envelopper wickeln betakar +wrapper emballage verpackung csomagolás +writable scrutin beschreibbar írható +write écrire schreiben írás +writeln écrivain schreiben írás +writes écrit schreibt ír +wrt wrt wrt wrt +xor xor xor xor +year année jahr év +yield rendement ertrag hozam +zero zéro null nulla +zone zone zone zóna diff --git a/main.rkt b/main.rkt new file mode 100644 index 0000000..4269f35 --- /dev/null +++ b/main.rkt @@ -0,0 +1,92 @@ +#lang racket/base + +(require (for-syntax racket/base + "reqprov-transformer.rkt" + "filters.rkt") + racket/require-syntax + racket/provide-syntax) + +(provide auto-rename-in/out auto-rename-in auto-rename-out + transform-in/out transform-in transform-out + + (for-syntax (all-from-out "reqprov-transformer.rkt" + "filters.rkt") + (auto-rename-out + (all-from-out "filters.rkt") + #:tx (transform/replace #rx"transform/" "tx/")))) + +(define-syntax auto-rename-in/out (new-auto-rename-transformer values)) +(define-require-syntax (auto-rename-in stx) + (syntax-case stx [] [(_ . tail) #`(auto-rename-in/out #:derived #,stx . tail)])) +(define-provide-syntax (auto-rename-out stx) + (syntax-case stx [] [(_ . tail) #`(auto-rename-in/out #:derived #,stx . tail)])) + +(define-syntax transform-in/out (make-rename-transformer #'auto-rename-in/out)) +(define-syntax transform-in (make-rename-transformer #'auto-rename-in)) +(define-syntax transform-out (make-rename-transformer #'auto-rename-out)) + +(module+ test + (define-syntax rust-in + (make-auto-rename-transformer + (transform/replace #rx"-" "🚀") + (transform/replace #rx"\\?" "🤔") + (transform/replace #rx"!" "💥"))) + + (require (rust-in rackunit racket/base)) + + (module mod racket/base + (require (submod ".." "..") (for-syntax racket/base racket/string)) + (provide (transform-out abc #:tx (transform/map string-upcase)) + (transform-out ABC #:tx (transform/for x (string-downcase x))) + (transform-out |def ghi| #:tx (transform/append-map string-split)) + (transform-out jKl #:tx (transform/for* it (list (string-downcase it) (string-upcase it)))) + (rename-out [pqr-1 pqr]) + (transform-out mno1 pqr #:tx (transform/filter (λ (it) (equal? it "mno1")))) + (transform-out mno2 pqr #:tx (transform/when it (equal? it "mno2"))) + (transform-out mno3 pqr #:tx (transform/remove (λ (it) (equal? it "pqr")))) + (transform-out mno4 pqr #:tx (transform/unless it (equal? it "pqr"))) + (transform-out stu1 stu2 stu3 pqr #:tx (transform/matches #rx"stu."))) + (define-values (abc ABC |def ghi| jKl mno1 mno2 mno3 mno4 pqr pqr-1 stu1 stu2 stu3) + (apply values '(abc ABC d/g jKl mno1 mno2 mno3 mno4 pqr pqr-1 stu1 stu2 stu3)))) + (require 'mod) + + (check🚀eq🤔 ABC 'abc) + (check🚀eq🤔 abc 'ABC) + (check🚀eq🤔 def 'd/g) + (check🚀eq🤔 ghi 'd/g) + (check🚀eq🤔 jkl 'jKl) + (check🚀eq🤔 JKL 'jKl) + (check🚀equal🤔 (list mno1 mno2 mno3 mno4 pqr) + '( mno1 mno2 mno3 mno4 pqr-1)) + (check🚀equal🤔 (list stu1 stu2 stu3) + '( stu1 stu2 stu3)) + + (check🚀equal🤔 + (let ([x 5]) (set💥 x 8) x) + 8) + + (module english racket/base + (require (for-syntax "reqprov-transformer.rkt" + "filters.rkt" + racket/base)) + (provide for-british) + (define-syntax for-british + (make-auto-rename-transformer + (transform/replace #rx"([yi])ze" "\\1se") + (transform/replace #rx"center" "centre") + (transform/replace #rx"defense" "defence") + (transform/replace #rx"or$" "our")))) + + (module american🇺🇸🦅 racket/base + (provide (all-defined-out)) + (define-values (analyze center defense labor organize) + (values 1 2 3 4 5))) + (module british🇬🇧🫖 racket/base + (require (submod ".." english) (submod ".." american🇺🇸🦅)) + (provide (for-british (all-from-out (submod ".." american🇺🇸🦅))))) + + (require 'british🇬🇧🫖) + (check🚀not🚀exn (λ () (list analyse centre defence labour))) + + ; + ) diff --git a/reqprov-transformer.rkt b/reqprov-transformer.rkt new file mode 100644 index 0000000..de28b19 --- /dev/null +++ b/reqprov-transformer.rkt @@ -0,0 +1,110 @@ +#lang racket/base + +(require "filters.rkt" + racket/require-transform + racket/provide-transform + + racket/list + racket/base + racket/sequence + racket/syntax + syntax/parse + racket/contract) + +(provide (struct-out auto-rename-transformer) + make-auto-rename-transformer) + +(define (apply-transforms xform im/exports) + (define rf + (xform + (case-lambda + [(im/ex acc) (cons im/ex acc)] + [(acc) (reverse acc)]))) + (rf (foldl rf null im/exports))) + +(define (call-wrapping-syntax-errors f . stxes) + (define (wrap-err it) + (writeln stxes) + (exn:fail:syntax (exn-message it) (exn-continuation-marks it) stxes)) + + (call-with-continuation-barrier + (λ () + (with-handlers ([exn:fail? (λ (it) (raise (wrap-err it)))]) + (f))))) + +(define (eval-transforms transform-stxes im/exports + #:orig-stx orig-stx + #:orig-exprs orig-transform-stxes + #:precompose [extra-transforms values]) + (define transforms + (apply + compose1 + extra-transforms + (for/list ([tf (in-syntax transform-stxes)] + [tf-stx (in-syntax orig-transform-stxes)]) + (call-wrapping-syntax-errors + (λ () (syntax-local-eval tf)) + orig-stx tf-stx)))) + (call-wrapping-syntax-errors + (λ () (apply-transforms transforms im/exports)) + orig-stx)) + +(define-splicing-syntax-class transformers + #:attributes {[transformers 1] [orig-transformers 1]} + [pattern {~optional {~seq {~and {~or #:tx #:transform} kw} txs ...}} + #:declare txs (expr/c #'filter/c + #:phase (add1 (syntax-local-phase-level)) + #:name (format "~a" (syntax-e #'kw))) + #:with (orig-transformers ...) #'({~? {~@ txs ...}}) + #:with (transformers ...) #'({~? {~@ txs.c ...}})]) + +(define (extract-derived stx) + (syntax-parse stx + [(func #:derived orig-stx . tail) + (values + #'orig-stx + (syntax/loc #'orig-stx (func . tail)))] + [_ (values stx stx)])) + +(define ((auto-rename-require-transform obj) stx) + (define-values (orig-stx stx*) (extract-derived stx)) + (syntax-parse stx* + #:context orig-stx + [(_ {~describe #:opaque "require sub-form" form:expr} + ...+ + tx:transformers) + (define-values (imports sources) + (for/lists (i s #:result (values (append* i) (append* s))) + ([it (in-syntax #'(form ...))]) + (expand-import it))) + (values (eval-transforms #'(tx.transformers ...) imports + #:orig-stx orig-stx + #:orig-exprs #'(tx.orig-transformers ...) + #:precompose (auto-rename-transformer-builtins obj)) + sources)])) + +(define ((auto-rename-provide-transform obj) stx modes) + (define-values (orig-stx stx*) (extract-derived stx)) + (syntax-parse stx* + #:context orig-stx + [(_ {~describe #:opaque "provide sub-form" form:expr} + ...+ + tx:transformers) + (define exports + (append* + (for/list ([it (in-syntax #'(form ...))]) + (expand-export it modes)))) + (eval-transforms #'(tx.transformers ...) + exports + #:orig-stx orig-stx + #:orig-exprs #'(tx.orig-transformers ...) + #:precompose (auto-rename-transformer-builtins obj))])) + +(struct auto-rename-transformer (builtins) + #:extra-constructor-name new-auto-rename-transformer + #:property prop:require-transformer auto-rename-require-transform + #:property prop:provide-transformer auto-rename-provide-transform) + +(define/contract (make-auto-rename-transformer . transforms) + (filter/c ... . -> . auto-rename-transformer?) + (new-auto-rename-transformer (apply compose1 transforms))) diff --git a/scribblings/auto-rename.scrbl b/scribblings/auto-rename.scrbl new file mode 100644 index 0000000..afe3cb2 --- /dev/null +++ b/scribblings/auto-rename.scrbl @@ -0,0 +1,253 @@ +#lang scribble/manual + +@(require (for-label auto-rename + racket/base + racket/sequence + racket/contract + racket/provide-transform + racket/require-transform) + scribble/example) + +@(define make-evaluator + (make-eval-factory (list 'racket 'auto-rename))) + +@title{Auto Rename Transformers} +@author{eutro} + +@defmodule[auto-rename] + +A package for programmatic @racket[require] and @racket[provide] filters and renamings. + +@(examples + #:eval (make-evaluator) + #:once + #:label "Example:" + + (eval:no-prompt + (module fancy-lib racket + (provide (all-defined-out)) + (struct fancy (x y z) #:transparent)) + code:blank) + + (require (transform-in + 'fancy-lib + #:transform (transform/replace "fancy" "not-so-fancy"))) + (not-so-fancy 1 2 3) + struct:not-so-fancy) + +@deftogether[[(defform (auto-rename-in require-spec ...+ #:transform transform ...)) + (defform (auto-rename-out provide-spec ...+ #:transform transform ...)) + (defform (auto-rename-in/out spec ...+ #:transform transform ...) + #:contracts ([transform filter/c]))]]{ +@tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "require transformer"]{Require} +and @tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "provide transformer"]{provide} +transformers which apply the given @racket[transform]s to all the imports and exports from the @racket[spec]s. +} + +@deftogether[[(defform (transform-in require-spec ...+ #:transform transforms ...)) + (defform (transform-out provide-spec ...+ #:transform transforms ...)) + (defform (transform-in/out spec ...+ #:transform transforms ...))]]{ +Aliases for @racket[auto-rename-in], @racket[auto-rename-out] and @racket[auto-rename-in/out]. +} + +@section{Transformers} + +@defmodule[auto-rename/filters] + +These bindings are provided by both @racket[auto-rename] and @racket[auto-rename/filters]. +@racket[auto-rename] additionally provides these bindings with @racket[tx/] replacing @racket[transformer/]. + +@defproc[(transform/filter [accept? (-> string? any/c)]) filter/c]{ +Include only imports/exports for which @racket[accept?] produces a true value. +} +@defform[(transform/when x accept?-expr)]{ +Equivalent to @racket[(transform/filter (λ (x) accept?-expr))]. +} + +@defproc[(transform/remove [reject? (-> string? any/c)]) filter/c]{ +Exclude any imports/exports for which @racket[reject?] produces a true value. +} +@defform[(transform/unless x reject?-expr)]{ +Equivalent to @racket[(transform/remove (λ (x) reject?-expr))]. +} + +@defproc[(transform/map [renamer (-> string? string?)]) filter/c]{ +Change the name of any imports/exports to the result of applying @racket[renamer] to the original name. +} +@defform[(transform/for x name-expr)]{ +Equivalent to @racket[(transform/map (λ (x) name-expr))]. +} + +@defproc[(transform/append-map [renamer (-> string? (sequence/c string?))]) filter/c]{ +Change the name of any imports/exports to the results of applying @racket[renamer] to the original name. +That is, the binding is imported/exported under every name that @racket[renamer] returns, or no names at all +if the returned sequence is empty. +} +@defform[(transform/for* x names-expr)]{ +Equivalent to @racket[(transform/append-map (λ (x) names-expr))]. +} + +@defproc[(transform/matches [pattern (or/c string? regexp?)]) filter/c]{ +Include only imports/exports whose name matches @racket[pattern]. +Equivalent to @racket[(transform/when name (regexp-match? pattern name))]. +} + +@defproc[(transform/replace [pattern (or/c string? regexp?)] + [replacement (or/c string? (string? string? ... . -> . string?))]) + filter/c]{ +Replace all occurrences of @racket[pattern] in import/export names with @racket[replacement], +as if by @racket[regexp-replace*]. + +Equivalent to @racket[(transform/for name (regexp-replace* pattern name replacement))]. +} + +@section{Miscellaneous Definitions} + +@deftogether[(@defthing[filter/c + contract? + #:value (-> (reducing-function/c im/export/c A) + (reducing-function/c im/export/c A))] + @defproc[(reducing-function/c [input/c contract?] [accumulator/c contract?]) + contract? + #:value (case-> + (input/c accumulator/c . -> . accumulator/c) + (accumulator/c . -> . accumulator/c))])]{ +A @deftech{filter} is a composable function which transforms streams of +imports/exports. @racketmodname[auto-rename] uses filters to modify +the sequence of imports/exports that @racket[auto-rename-in/out] produce. +Typically one would use the @racket[transform/xyz] functions available in +@racketmodname[auto-rename/filters] to construct these, rather than +writing them by hand. + +A @deftech{reducing function} is a type of procedure which accumulates inputs +into an accumulator. @racketmodname[auto-rename] uses reducing functions +to transform a sequence of imports/exports into the list of imports/exports +produced by @racket[auto-rename-in/out]. Typically, one does not see reducing +functions unless they are writing a @tech{filter} by hand. + +Specifically @racket[(reducing-function/c in/c acc/c)] is a contract +for a procedure @racket[rf] suitable for the expression +@racket[(rf (foldl rf acc ins))], where @racket[acc] and @racket[ins] conform to +@racket[acc/c] and @racket[(listof in/c)] respectively, and a @tech{filter} +is a function which maps an import/export @tech{reducing function} to a new import/export +reducing function, which may rename, remove, duplicate, or otherwise modify the +stream of imports/exports that the original reducing function receives, but +may not observe or modify the accumulator. + +@(examples + #:eval (make-evaluator) + #:once #:no-prompt + #:label "Some illustrative, but not terribly useful, examples:" + + (code:line + (code:comment "A transformer which drops all imports/exports.") + (define (transform/none rf) + (case-lambda + [(im/ex acc) acc] + [(acc) acc]))) + + (code:line + code:blank + (code:comment "A transformer which drops imports randomly.") + (define (transform/drop-randomly rf) + (case-lambda + [(im/ex acc) + (if (zero? (random 2)) + acc + (rf im/ex acc))] + [(acc) acc]))) + ) +} + +@defthing[im/export/c contract? #:value (or/c import? export?)]{ +A import or an export. +} + +@defproc[(im/export-name [im/ex im/export/c]) string?]{ +Get the name of an import/export. +} + +@defproc[(im/export-map-name [im/ex im/export/c] [proc (-> string? string?)]) im/export/c]{ +Return a copy of @racket[im/ex] with its name transformed by @racket[proc]. +} + +@defproc[(transform/compose [transform filter/c] ...) filter/c]{ +Compose the given @racket[transform]s. +The effects of the transformations are performed left to right. +} + +@section{Internationalisation Support} + +Bindings detailed in this section are experimental, and may not be +up to the same quality as those exported by @racketmodname[auto-rename]. +I make no backwards-compatibility guarantees. + +@subsection{British and American English} + +@defmodule[auto-rename/language/british-english] + +This module provides require/provide transformers for +importing and exporting bindings with British English spelling. + +@(examples + #:eval (make-evaluator) + #:once + (require auto-rename/language/british-english + (for-british racket)) + (normalise-arity 1) + (rationalise 1/4 1/10) + (eval:error + (parameterise ([error-print-width 5]) + (car (expt 10 1024)))) + (string-normalise-spaces " foo bar baz \r\n\t")) + +@defform[(for-british spec ...+)]{ +A @tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "require transformer"]{require} +and @tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "provide transformer"]{provide} +transformer which renames identifiers using American English spellings to use British English spellings instead. +} + +@defform[(for-american spec ...+)]{ +A @tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "require transformer"]{require} +and @tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "provide transformer"]{provide} +transformer which renames identifiers using British English spellings to use American English spellings instead. +} + +@subsection{Other languages} + +@defmodule[auto-rename/language/polyglot] + +This module provides require/provide transformers +for importing and exporting bindings in languages like French, German +and Hungarian. Due to the automated and word-based nature of these +translations they may not be very good, but they are predictable. +Sometimes. + +@(examples + #:eval (make-evaluator) + #:once + + (require auto-rename/language/polyglot) + (require (en-français racket/base)) + (pour ([x (dans-gamme 5)]) + (affichage x)) + + (exiger (auf-deutsch racket/base)) + (für ([x (in-reichweite 5)]) + (schreiben x)) + + (erfordern (magyarul racket/base)) + (-ra ([x (-ben-hatótávolság 5)]) + (írás x))) + +@deftogether[[(defform (en-français spec ...+)) + (defform (auf-deutsch spec ...+)) + (defform (magyarul spec ...+))]]{ +@tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "require transformer"]{Require} +and @tech[#:doc '(lib "scribblings/reference/reference.scrbl") #:key "provide transformer"]{provide} +transformers which renames identifiers to be in the corresponding language. + +This works by splitting each identifier into tokens of (English) alphabet +characters, and applying pre-defined translations (if any) to each token +individually. +}