Skip to content

Instantly share code, notes, and snippets.

@raine
Created September 20, 2018 17:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raine/b74925a1a57897bda41134b7101debfb to your computer and use it in GitHub Desktop.
Save raine/b74925a1a57897bda41134b7101debfb to your computer and use it in GitHub Desktop.
@{% function nuller() { return null; } %}
@{% function joiner(d) { return d.join(''); } %}
@{% const R = require('ramda'); %}
main -> any frame_size_candidate _ any {% R.nth(1) %}
frame_size_candidate ->
frame_size_prefix _ ":":? _ frame_size {% R.last %}
| frame_size_tshirt "-size"i {% R.head %}
| frame_size_tshirt _ "koko"i {% R.head %}
# | frame_size_number _ "cm"i
frame_size_prefix ->
"Rungon koko"i
| "Rungon koko (lisää myös otsikkoon)"i
| "Runko"i "koko"i:?
| "Rungonkoko"i _ "on"i
| "Runkokoko"i _ "on"i
| "Runko"i
| "Koko"i "a":?
| "Frame size"i
| "Size"i
frame_size ->
frame_size_cm {% R.head %}
| frame_size_tshirt {% R.head %}
frame_size_cm ->
frame_size_number {% R.pipe(R.head, x => x + 'cm') %}
frame_size_number -> (
"4" [0-9]
| "5" [0-9]
| "6" [0-5]
) {% R.pipe(R.head, R.join('')) %}
frame_size_tshirt -> (
"3XL"i
| "XXL"i
| "2XL"i
| "XL"i
| "L"i
| "M"i
| "S"i
| "XS"i
| "XXS"i
| "2XS"i
| "3XS"i
) {% R.pipe(R.flatten, R.head, R.toUpper) %}
any -> (. | "\n"):* {% nuller %}
_ -> [\s]:* {% function(d) {return null; } %}
@raine
Copy link
Author

raine commented Sep 20, 2018

  runTestList('parseFrameSize()', parseFrameSize, [
    ["blah\nRungon koko (lisää myös otsikkoon): 54 cm\nblah", '54cm'],
    ["blah\nRungon koko (lisää myös otsikkoon): 52cm\nblah", '52cm'],
    ["blah\nRungon koko (lisää myös otsikkoon): 59\nblah", '59cm'],
    ["blah\nRungon koko 54\nblah", '54cm'],
    ["blah\nRungon koko (lisää myös otsikkoon): L\nblah", 'L'],
    ["blah\nFrame Size: 55cm\nblah", '55cm'],
    ["blah\nfoo L-Size bar\nblah", 'L'],
    ["blah\nKoko 54\nblah", '54cm'],
    ["blah\nRunkokoko 54cm\nblah", '54cm'],
    ["blah\nRungon koko :58 cm, sopii yli\nblah", '58cm'],
    ["blah\nRungon koko: 54\nblah", '54cm'],
    ["blah\nkokoa 47 cm\nblah", '47cm'],
    ["blah\nRunko Hiilikuitu koko s \nblah", 'S'],
    ["blah\nWilier Izoard Ultegra hiilikuitu S koko -vm 2009\nblah", 'S'],
    ["blah\nRunko 55 cm\nblah", '55cm'],
    ["blah\nRunkokoko on 56cm melko tavanomaisella\nblah", '56cm'],
    ["blah\nRunko hiilikuitua, koko 58, sopii n. 184-200 pituisille\nblah", '58cm'],
    ["blah\nRungon koko: 55,5/L\nblah", '55cm'],
    ["blah\nCarbon frame, size 55. 2016. \nblah", '55cm'],
    ["blah\nFSA Gossamer kammet. Koko XL sopii n 185 blah", 'XL'],
    // ["blah\nMoser 111 Ultegra hiilikuitu 56 cm -vm 2013 \nblah", '56cm'],
  ])

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment