home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / x / xpose.zip / XPOSE.LEX < prev   
Text File  |  1993-01-17  |  5KB  |  212 lines

  1. %{
  2. /***********************************************************************
  3.  
  4. Author        : Brad Slaten
  5.               Copyright 1992
  6. email        : cbs@sbctri.sbc.com
  7. Date        : Thu Sep 17 08:13:29 CDT 1992
  8. Purpose        : This is a lex(1) script that translates non ChordPro
  9.               format songs (i.e. text with chord names above the
  10.               text) into ChordPro format.  It is extremely rough and
  11.               buggy, but it is usually better than nothing. 
  12. SCCS ID @(#) toChord.l 1.5 Delta Date/Time: 9/17/92/08:17:41; Extraction Date/Time: 9/17/92/08:24:06 @(#)
  13.  **********************************************************************/
  14. #include <stdio.h>
  15. typedef int Boolean;
  16. char ChordBuffer[256];
  17. char TextBuffer[256];
  18. char* ActiveBuffer;
  19. char* ActiveBufferPtr;
  20. int NumChords;
  21. int NumText;
  22. int Initialized;
  23. %}
  24. Root    [A-G/]
  25. Text    [A-Za-z]+
  26. Number    [0-9]+
  27. Whitespace    [ \t]
  28. Newline    [\n]
  29. %%
  30. {Whitespace}    processWhiteSpace();
  31. {Newline}    processNewline();
  32. {Root}    processChord();
  33. {Root}{Number}    processChord();
  34. {Root}m    processChord();
  35. {Root}\-    processChord();
  36. {Root}o    processChord();
  37. {Root}dim    processChord();
  38. {Root}"+"    processChord();
  39. {Root}"m"{Number}    processChord();
  40. {Root}{Number}"+"{Number}    processChord();
  41. {Root}{Number}\-{Number}    processChord();
  42. {Root}{Number}b{Number}    processChord();
  43. {Root}maj{Number}    processChord();
  44. {Root}ma{Number}    processChord();
  45. {Root}maj{Number}b{Number}    processChord();
  46. {Root}min\-ma{Number}    processChord();
  47. {Root}m{Number}b{Number}    processChord();
  48. {Root}{Number}sus{Number}    processChord();
  49. {Root}{Number}#{Number}    processChord();
  50. {Root}{Number}add{Number}    processChord();
  51. {Root}{Number}{Number}    processChord();
  52. {Root}"#"    processChord();
  53. {Root}"#"{Number}    processChord();
  54. {Root}"#"m    processChord();
  55. {Root}"#"\-    processChord();
  56. {Root}"#"o    processChord();
  57. {Root}"#"dim    processChord();
  58. {Root}"#""+"    processChord();
  59. {Root}"#""m"{Number}    processChord();
  60. {Root}"#"{Number}"+"{Number}    processChord();
  61. {Root}"#"{Number}\-{Number}    processChord();
  62. {Root}"#"{Number}b{Number}    processChord();
  63. {Root}"#"maj{Number}    processChord();
  64. {Root}"#"ma{Number}    processChord();
  65. {Root}"#"maj{Number}b{Number}    processChord();
  66. {Root}"#"min\-ma{Number}    processChord();
  67. {Root}"#"m{Number}b{Number}    processChord();
  68. {Root}"#"{Number}sus{Number}    processChord();
  69. {Root}"#"{Number}#{Number}    processChord();
  70. {Root}"#"{Number}add{Number}    processChord();
  71. {Root}"#"{Number}{Number}    processChord();
  72. {Root}"b"    processChord();
  73. {Root}"b"{Number}    processChord();
  74. {Root}"b"m    processChord();
  75. {Root}"b"\-    processChord();
  76. {Root}"b"o    processChord();
  77. {Root}"b"dim    processChord();
  78. {Root}"b""+"    processChord();
  79. {Root}"b""m"{Number}    processChord();
  80. {Root}"b"{Number}"+"{Number}    processChord();
  81. {Root}"b"{Number}\-{Number}    processChord();
  82. {Root}"b"{Number}b{Number}    processChord();
  83. {Root}"b"maj{Number}    processChord();
  84. {Root}"b"ma{Number}    processChord();
  85. {Root}"b"maj{Number}b{Number}    processChord();
  86. {Root}"b"min\-ma{Number}    processChord();
  87. {Root}"b"m{Number}b{Number}    processChord();
  88. {Root}"b"{Number}sus{Number}    processChord();
  89. {Root}"b"{Number}#{Number}    processChord();
  90. {Root}"b"{Number}add{Number}    processChord();
  91. {Root}"b"{Number}{Number}    processChord();
  92. {Text}    processText();
  93. {Number}    processText();
  94. .    processText();
  95. %%
  96. init()
  97. {
  98.     if (!Initialized) {
  99.         Initialized = 1;
  100.         ActiveBuffer = ChordBuffer;
  101.         ActiveBufferPtr = ActiveBuffer;
  102.         NumChords = 0;
  103.         NumText = 0;
  104.     }
  105. }
  106.  
  107. processChord()
  108. {
  109.     init();
  110.     sprintf(ActiveBufferPtr,"%s",yytext);
  111.     ActiveBufferPtr += strlen(ActiveBufferPtr);
  112.     NumChords += strlen(yytext);
  113. }
  114.  
  115. processText()
  116. {
  117.     init();
  118.     sprintf(ActiveBufferPtr,"%s",yytext);
  119.     ActiveBufferPtr += strlen(ActiveBufferPtr);
  120.     NumText += strlen(yytext);
  121. }
  122.  
  123. processWhiteSpace()
  124. {
  125.     init();
  126.     sprintf(ActiveBufferPtr,"%s",yytext);
  127.     ActiveBufferPtr += strlen(ActiveBufferPtr);
  128. }
  129.  
  130. processNewline()
  131. {
  132.     init();
  133.     /*
  134.     sprintf(ActiveBufferPtr,"%s",yytext);
  135.     ActiveBufferPtr += strlen(ActiveBufferPtr);
  136.     */
  137.     if (NumChords > NumText) {
  138.         /* assume a chord line */
  139.         if (ActiveBuffer != ChordBuffer) {
  140.             printSong(ChordBuffer,"\0");
  141.             ChordBuffer[0] = '\0';
  142.         }
  143.         else {
  144.             ActiveBuffer = TextBuffer;
  145.         }
  146.         ActiveBufferPtr = ActiveBuffer;
  147.     }
  148.     else {
  149.         /* assume a Text line */
  150.         if (ActiveBuffer == ChordBuffer) {
  151.             printSong("\0",ActiveBuffer);
  152.             ChordBuffer[0] = '\0';
  153.         }
  154.         else {
  155.             printSong(ChordBuffer,TextBuffer);
  156.             ActiveBuffer = ChordBuffer;
  157.             ChordBuffer[0] = '\0';
  158.             TextBuffer[0] = '\0';
  159.         }
  160.         ActiveBufferPtr = ActiveBuffer;
  161.     }
  162.     NumChords = NumText = 0;
  163. }
  164.  
  165. printSong(chordBuffer,textBuffer)
  166. char* chordBuffer;
  167. char* textBuffer;
  168. {
  169. static Boolean ChordOpenFlag;
  170. char* chordBufferPtr;
  171. char* textBufferPtr;
  172. int chordWidth;
  173.     chordBufferPtr = chordBuffer;
  174.     textBufferPtr = textBuffer;
  175.     chordWidth = 0;
  176.     while(*chordBufferPtr != '\0') {
  177.         if (*chordBufferPtr != ' ') {
  178.             fprintf(stdout,"[");
  179.             while ((*chordBufferPtr != ' ') &&
  180.                     (*chordBufferPtr != '\0')) {
  181.                 fprintf(stdout,"%c",*chordBufferPtr);
  182.                 chordWidth++;
  183.                 chordBufferPtr++;
  184.             }
  185.             fprintf(stdout,"]");
  186.             while ((chordWidth > 0) && (*textBufferPtr != '\0')) {
  187.                 chordWidth--;
  188.                 fprintf(stdout,"%c",*textBufferPtr);
  189.                 textBufferPtr++;
  190.             }
  191.             chordWidth = 0;
  192.         }
  193.         else {
  194.             if (*textBufferPtr != '\0') {    
  195.                 fprintf(stdout,"%c",*textBufferPtr);
  196.             }
  197.             else {
  198.                 fprintf(stdout," ");
  199.             }
  200.             chordBufferPtr++;
  201.             if (*textBufferPtr != '\0') {
  202.                 textBufferPtr++;
  203.             }
  204.         }
  205.     }
  206.     while(*textBufferPtr != '\0') {
  207.         fprintf(stdout,"%c",*textBufferPtr);
  208.         textBufferPtr++;
  209.     }
  210.     fprintf(stdout,"\n");
  211. }
  212.