Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

toc_scan.l 3.3 KiB

20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
20 år sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. %{
  2. /*
  3. * toc_scan.l -- lexer for toc files
  4. *
  5. * Copyright (C) 2004 Svend Sorensen
  6. * For license terms, see the file COPYING in this distribution.
  7. */
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include "cd.h"
  11. #include "toc_parse_prefix.h"
  12. #include "toc_parse.h"
  13. int toc_lineno = 1;
  14. %}
  15. ws [ \t\r]
  16. nonws [^ \t\r\n]
  17. %option noyywrap
  18. %option prefix="toc_yy"
  19. %s NAME
  20. %%
  21. \'([^\']|\\\')*\' |
  22. \"([^\"]|\\\")*\" {
  23. yylval.sval = strdup(yytext + 1);
  24. yylval.sval[strlen(yylval.sval) - 1] = '\0';
  25. BEGIN(INITIAL);
  26. return STRING;
  27. }
  28. <NAME>{nonws}+ {
  29. yylval.sval = strdup(yytext);
  30. BEGIN(INITIAL);
  31. return STRING;
  32. }
  33. CATALOG { BEGIN(NAME); return CATALOG; }
  34. CD_DA { yylval.ival = MODE_CD_DA; return CD_DA; }
  35. CD_ROM { yylval.ival = MODE_CD_ROM; return CD_ROM; }
  36. CD_ROM_XA { yylval.ival = MODE_CD_ROM_XA; return CD_ROM_XA; }
  37. TRACK { return TRACK; }
  38. AUDIO { yylval.ival = MODE_AUDIO; return AUDIO; }
  39. MODE1 { yylval.ival = MODE_MODE1; return MODE1; }
  40. MODE1_RAW { yylval.ival = MODE_MODE1_RAW; return MODE1_RAW; }
  41. MODE2 { yylval.ival = MODE_MODE2; return MODE2; }
  42. MODE2_FORM1 { yylval.ival = MODE_MODE2_FORM1; return MODE2_FORM1; }
  43. MODE2_FORM2 { yylval.ival = MODE_MODE2_FORM2; return MODE2_FORM2; }
  44. MODE2_FORM_MIX { yylval.ival = MODE_MODE2_FORM_MIX; return MODE2_FORM_MIX; }
  45. MODE2_RAW { yylval.ival = MODE_MODE2_RAW; return MODE2_RAW; }
  46. RW { yylval.ival = SUB_MODE_RW; return RW; }
  47. RW_RAW { yylval.ival = SUB_MODE_RW_RAW; return RW_RAW; }
  48. NO { return NO; }
  49. COPY { yylval.ival = FLAG_PRE_EMPHASIS; return COPY; }
  50. PRE_EMPHASIS { yylval.ival = FLAG_COPY_PERMITTED; return PRE_EMPHASIS; }
  51. FOUR_CHANNEL_AUDIO { yylval.ival = FLAG_FOUR_CHANNEL; return FOUR_CHANNEL_AUDIO; }
  52. TWO_CHANNEL_AUDIO { yylval.ival = FLAG_FOUR_CHANNEL; return TWO_CHANNEL_AUDIO; }
  53. /* ISRC is with CD-TEXT items */
  54. SILENCE { return SILENCE; }
  55. ZERO { return ZERO; }
  56. (AUDIO)?FILE { BEGIN(NAME); return AUDIOFILE; }
  57. DATAFILE { BEGIN(NAME); return DATAFILE; }
  58. FIFO { BEGIN(NAME); return FIFO; }
  59. START { return START; }
  60. PREGAP { return PREGAP; }
  61. INDEX { return INDEX; }
  62. CD_TEXT { return CD_TEXT; }
  63. LANGUAGE_MAP { return LANGUAGE_MAP; }
  64. LANGUAGE { return LANGUAGE; }
  65. TITLE { BEGIN(NAME); yylval.ival = PTI_TITLE; return TITLE; }
  66. PERFORMER { BEGIN(NAME); yylval.ival = PTI_PERFORMER; return PERFORMER; }
  67. SONGWRITER { BEGIN(NAME); yylval.ival = PTI_SONGWRITER; return SONGWRITER; }
  68. COMPOSER { BEGIN(NAME); yylval.ival = PTI_COMPOSER; return COMPOSER; }
  69. ARRANGER { BEGIN(NAME); yylval.ival = PTI_ARRANGER; return ARRANGER; }
  70. MESSAGE { BEGIN(NAME); yylval.ival = PTI_MESSAGE; return MESSAGE; }
  71. DISC_ID { BEGIN(NAME); yylval.ival = PTI_DISC_ID; return DISC_ID; }
  72. GENRE { BEGIN(NAME); yylval.ival = PTI_GENRE; return GENRE; }
  73. TOC_INFO1 { BEGIN(NAME); yylval.ival = PTI_TOC_INFO1; return TOC_INFO1; }
  74. TOC_INFO2 { BEGIN(NAME); yylval.ival = PTI_TOC_INFO2; return TOC_INFO2; }
  75. UPC_EAN { BEGIN(NAME); yylval.ival = PTI_UPC_ISRC; return UPC_EAN; }
  76. ISRC { BEGIN(NAME); yylval.ival = PTI_UPC_ISRC; return ISRC; }
  77. SIZE_INFO { BEGIN(NAME); yylval.ival = PTI_SIZE_INFO; return SIZE_INFO; }
  78. "//".*\n { toc_lineno++; /* ignore comments */ }
  79. {ws}+ { /* ignore whitespace */ }
  80. [[:digit:]]+ { yylval.ival = atoi(yytext); return NUMBER; }
  81. :|,|\{|\} { return yytext[0]; }
  82. ^{ws}*\n { toc_lineno++; /* blank line */ }
  83. \n { toc_lineno++; return '\n'; }
  84. . { fprintf(stderr, "bad character '%c'\n", yytext[0]); }
  85. %%