Revision 0ba7b031

b/kamaki/cli/utils.py
334 334
    return terms
335 335

  
336 336

  
337
def split_input(line):
338
    """Use regular expressions to split a line correctly
339
    """
337
def old_split_input(line):
338
    """Use regular expressions to split a line correctly"""
340 339
    line = ' %s ' % line
341 340
    (trivial_parts, interesting_parts) = _parse_with_regex(line, ' \'.*?\' ')
342 341
    terms = []
......
347 346
    return terms
348 347

  
349 348

  
349
def _get_from_parsed(parsed_str):
350
    try:
351
        parsed_str = parsed_str.strip()
352
    except:
353
        return None
354
    if parsed_str:
355
        if parsed_str[0] == parsed_str[-1] and parsed_str[0] in ("'", '"'):
356
            return [parsed_str[1:-1]]
357
        return parsed_str.split(' ')
358
    return None
359

  
360

  
361
def split_input(line):
362
    if not line:
363
        return []
364
    reg_expr = '\'.*?\'|".*?"|^[\S]*$'
365
    (trivial_parts, interesting_parts) = _parse_with_regex(line, reg_expr)
366
    assert(len(trivial_parts) == 1 + len(interesting_parts))
367
    #print('  [split_input] trivial_parts %s are' % trivial_parts)
368
    #print('  [split_input] interesting_parts %s are' % interesting_parts)
369
    terms = []
370
    for i, tpart in enumerate(trivial_parts):
371
        part = _get_from_parsed(tpart)
372
        if part:
373
            terms += part
374
        try:
375
            part = _get_from_parsed(interesting_parts[i])
376
        except IndexError:
377
            break
378
        if part:
379
            terms += part
380
    return terms
381

  
382

  
350 383
def ask_user(msg, true_resp=['Y', 'y']):
351 384
    """Print msg and read user response
352 385

  
......
358 391
    stdout.flush()
359 392
    user_response = stdin.readline()
360 393
    return user_response[0] in true_resp + ['\n']
394

  
395

  
396
if __name__ == '__main__':
397
    examples = ['la_la le_le li_li',
398
        '\'la la\' \'le le\' \'li li\'',
399
        '\'la la\' le_le \'li li\'',
400
        'la_la \'le le\' li_li',
401
        'la_la \'le le\' \'li li\'',
402
        '"la la" "le le" "li li"',
403
        '"la la" le_le "li li"',
404
        'la_la "le le" li_li',
405
        '"la_la" "le le" "li li"',
406
        '\'la la\' "le le" \'li li\'',
407
        'la_la \'le le\' "li li"',
408
        'la_la \'le le\' li_li',
409
        '\'la la\' le_le "li li"',
410
        '"la la" le_le \'li li\'',
411
        '"la la" \'le le\' li_li',
412
        'la_la \'le\'le\' "li\'li"',
413
        '"la \'le le\' la"',
414
        '\'la "le le" la\'',
415
        '\'la "la" la\' "le \'le\' le" li_"li"_li',
416
        '\'\' \'L\' "" "A"'
417
    ]
418

  
419
    for i, example in enumerate(examples):
420
        print('%s. Split this: (%s)' % (i + 1, example))
421
        ret = old_split_input(example)
422
        print('\t(%s) of size %s' % (ret, len(ret)))

Also available in: Unified diff