# Copyright (c) 2005 - 2006 Hans Jeuken. All rights reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.

# This file was generated from the 'mup.xml' file of the syntax highlight
# engine of the kate text editor (http://www.kate-editor.org

#kate xml version 1.06
#kate version 2.4
#kate author Wilbert Berendsen (wilbert@kde.nl)
#generated: Sun Feb  3 22:02:05 2008, localtime

package Syntax::Highlight::Engine::Kate::Music_Publisher;

use vars qw($VERSION);
$VERSION = '0.03';

use strict;
use warnings;
use base('Syntax::Highlight::Engine::Kate::Template');

sub new {
   my $proto = shift;
   my $class = ref($proto) || $proto;
   my $self = $class->SUPER::new(@_);
   $self->attributes({
      'Barline' => 'DecVal',
      'Comment' => 'Comment',
      'Context' => 'Keyword',
      'Error' => 'Error',
      'Location' => 'Operator',
      'Location Probably' => 'Reserved',
      'Lyrics' => 'BaseN',
      'Macro' => 'Others',
      'Newscore' => 'BString',
      'Normal Text' => 'Normal',
      'Note' => 'Normal',
      'Note Attribute' => 'Normal',
      'Parameter' => 'Char',
      'Print Command' => 'BaseN',
      'Special Char' => 'Keyword',
      'String' => 'String',
      'String Error' => 'Error',
      'String Lyrics' => 'String',
      'String Special' => 'IString',
      'Tuplet' => 'RegionMarker',
      'Unset Command' => 'Variable',
      'Value' => 'Float',
   });
   $self->listAdd('mupcontexts',
      'block',
      'bottom',
      'bottom2',
      'footer',
      'footer2',
      'grids',
      'header',
      'header2',
      'headshapes',
      'music',
      'music',
      'score',
      'staff',
      'top',
      'top2',
      'voice',
   );
   $self->listAdd('mupfontnames',
      'avantgarde',
      'bookman',
      'courier',
      'helvetica',
      'newcentury',
      'palatino',
      'times',
   );
   $self->listAdd('mupfontstyles',
      'bold',
      'boldital',
      'ital',
      'rom',
   );
   $self->listAdd('mupgraphics',
      'bulge',
      'curve',
      'dashed',
      'dotted',
      'down',
      'line',
      'medium',
      'midi',
      'mussym',
      'octave',
      'pedal',
      'phrase',
      'roll',
      'to',
      'to',
      'up',
      'wavy',
      'wide',
      'with',
   );
   $self->listAdd('muplocations',
      'above',
      'all',
      'below',
      'between',
   );
   $self->listAdd('mupmacrodirectives',
      'else',
      'include',
      'undef',
   );
   $self->listAdd('mupmacrodirectives_end',
      '@',
      'endif',
   );
   $self->listAdd('mupmacrodirectives_start',
      'define',
      'ifdef',
      'ifndef',
   );
   $self->listAdd('mupmusicchars',
      '128rest',
      '16rest',
      '1n',
      '1rest',
      '256rest',
      '2n',
      '2rest',
      '32rest',
      '4n',
      '4rest',
      '64rest',
      '8rest',
      'acc_gt',
      'acc_hat',
      'acc_uhat',
      'begped',
      'cclef',
      'coda',
      'com',
      'copyright',
      'cut',
      'dblflat',
      'dblsharp',
      'dblwhole',
      'diamond',
      'dim',
      'dn128n',
      'dn16n',
      'dn256n',
      'dn2n',
      'dn32n',
      'dn4n',
      'dn64n',
      'dn8n',
      'dnbow',
      'dnflag',
      'dot',
      'dwhdiamond',
      'dwhrest',
      'endped',
      'fclef',
      'ferm',
      'filldiamond',
      'flat',
      'gclef',
      'halfdim',
      'invmor',
      'invturn',
      'leg',
      'measrpt',
      'mor',
      'nat',
      'pedal',
      'qwhrest',
      'rr',
      'sharp',
      'sign',
      'sm128rest',
      'sm16rest',
      'sm1n',
      'sm1rest',
      'sm256rest',
      'sm2n',
      'sm2rest',
      'sm32rest',
      'sm4n',
      'sm4rest',
      'sm64rest',
      'sm8rest',
      'smacc_gt',
      'smacc_hat',
      'smacc_uhat',
      'smbegped',
      'smcclef',
      'smcoda',
      'smcom',
      'smcopyright',
      'smcut',
      'smdblflat',
      'smdblsharp',
      'smdblwhole',
      'smdiamond',
      'smdim',
      'smdn128n',
      'smdn16n',
      'smdn256n',
      'smdn2n',
      'smdn32n',
      'smdn4n',
      'smdn64n',
      'smdn8n',
      'smdnbow',
      'smdnflag',
      'smdot',
      'smdwhdiamond',
      'smdwhrest',
      'smendped',
      'smfclef',
      'smferm',
      'smfilldiamond',
      'smflat',
      'smgclef',
      'smhalfdim',
      'sminvmor',
      'sminvturn',
      'smleg',
      'smmeasrpt',
      'smmor',
      'smnat',
      'smpedal',
      'smqwhrest',
      'smrr',
      'smsharp',
      'smsign',
      'smtr',
      'smtriangle',
      'smturn',
      'smuferm',
      'smup128n',
      'smup16n',
      'smup256n',
      'smup2n',
      'smup32n',
      'smup4n',
      'smup64n',
      'smup8n',
      'smupbow',
      'smupflag',
      'smuwedge',
      'smwedge',
      'smxnote',
      'tr',
      'triangle',
      'turn',
      'uferm',
      'up128n',
      'up16n',
      'up256n',
      'up2n',
      'up32n',
      'up4n',
      'up64n',
      'up8n',
      'upbow',
      'upflag',
      'uwedge',
      'wedge',
      'xnote',
   );
   $self->listAdd('mupparameters',
      'aboveorder',
      'addtranspose',
      'barstyle',
      'beamslope',
      'beamstyle',
      'beloworder',
      'betweenorder',
      'bottommargin',
      'brace',
      'bracket',
      'cancelkey',
      'chorddist',
      'clef',
      'crescdist',
      'defoct',
      'dist',
      'division',
      'dyndist',
      'endingstyle',
      'firstpage',
      'font',
      'fontfamily',
      'gridfret',
      'gridsatend',
      'gridscale',
      'gridswhereused',
      'key',
      'label',
      'label2',
      'leftmargin',
      'lyricsalign',
      'lyricsfont',
      'lyricsfontfamily',
      'lyricssize',
      'measnum',
      'measnumfont',
      'measnumfontfamily',
      'measnumsize',
      'noteheads',
      'numbermrpt',
      'ontheline',
      'packexp',
      'packfact',
      'pad',
      'pageheight',
      'pagewidth',
      'panelsperpage',
      'pedstyle',
      'printmultnum',
      'rehstyle',
      'release',
      'restcombine',
      'restsymmult',
      'rightmargin',
      'scale',
      'scorepad',
      'scoresep',
      'size',
      'stafflines',
      'staffpad',
      'staffs',
      'staffscale',
      'staffsep',
      'stemlen',
      'swingunit',
      'sylposition',
      'tabwhitebox',
      'time',
      'timeunit',
      'topmargin',
      'transpose',
      'units',
      'visible',
      'vscheme',
      'warn',
   );
   $self->listAdd('mupprintcommands',
      'center',
      'left',
      'paragraph',
      'postscript',
      'print',
      'right',
      'title',
   );
   $self->listAdd('mupprintspecifiers',
      'analysis',
      'chord',
      'dyn',
      'figbass',
   );
   $self->listAdd('mupspecialchars',
      '\\\'\\\'',
      '<<',
      '>>',
      'A\\\'',
      'A:',
      'AE',
      'A^',
      'A`',
      'Aacute',
      'Acircumflex',
      'Adieresis',
      'Agrave',
      'Ao',
      'Aring',
      'Atilde',
      'A~',
      'C,',
      'Ccedilla',
      'E\\\'',
      'E:',
      'E^',
      'E`',
      'Eacute',
      'Ecircumflex',
      'Edieresis',
      'Egrave',
      'I\\\'',
      'I^',
      'I`',
      'Iacute',
      'Icircumflex',
      'Idieresis',
      'Igrave',
      'L/',
      'Lslash',
      'Ntilde',
      'N~',
      'O\\\'',
      'O/',
      'O:',
      'OE',
      'O^',
      'O`',
      'Oacute',
      'Ocircumflex',
      'Odieresis',
      'Ograve',
      'Oslash',
      'Otilde',
      'O~',
      'Scaron',
      'Sv',
      'U\\\'',
      'U:',
      'U^',
      'U`',
      'Uacute',
      'Ucircumflex',
      'Udieresis',
      'Ugrave',
      'Y:',
      'Ydieresis',
      'Zcaron',
      'Zv',
      '``',
      'a\\\'',
      'a:',
      'a^',
      'a`',
      'aacute',
      'acircumflex',
      'acute',
      'adieresis',
      'ae',
      'agrave',
      'ao',
      'aring',
      'atilde',
      'a~',
      'breve',
      'bullet',
      'c,',
      'caron',
      'ccedilla',
      'cedilla',
      'cent',
      'dagger',
      'daggerdbl',
      'dieresis',
      'dotaccent',
      'dotlessi',
      'e\\\'',
      'e:',
      'e^',
      'e`',
      'eacute',
      'ecircumflex',
      'edieresis',
      'egrave',
      'emdash',
      'exclamdown',
      'germandbls',
      'grave',
      'guildsinglleft',
      'guillemotleft',
      'guillemotright',
      'guilsinglright',
      'hungarumlaut',
      'i\\\'',
      'i:',
      'i:',
      'i^',
      'i`',
      'iacute',
      'icircumflex',
      'idieresis',
      'igrave',
      'l/',
      'lslash',
      'macron',
      'ntilde',
      'n~',
      'o\\\'',
      'o/',
      'o:',
      'o^',
      'o`',
      'oacute',
      'ocircumflex',
      'odieresis',
      'oe',
      'ogonek',
      'ograve',
      'ordfeminine',
      'ordmasculine',
      'oslash',
      'otilde',
      'o~',
      'questiondown',
      'quotedblbase',
      'quotedblleft',
      'quotedblright',
      'ring',
      'scaron',
      'space',
      'ss',
      'sterling',
      'sv',
      'u\\\'',
      'u:',
      'u^',
      'u`',
      'uacute',
      'ucircumflex',
      'udieresis',
      'ugrave',
      'y:',
      'ydieresis',
      'yen',
      'zcaron',
      'zv',
   );
   $self->listAdd('mupvalues',
      '1drum',
      '1n',
      '2f',
      '2o',
      '3f',
      '3o',
      '5drum',
      '5n',
      '8treble',
      'alt',
      'alto',
      'aug',
      'augmented',
      'baritone',
      'barred',
      'bass',
      'boxed',
      'chord',
      'circled',
      'cm',
      'common',
      'cut',
      'dim',
      'diminished',
      'down',
      'drum',
      'dyn',
      'ending',
      'frenchviolin',
      'grouped',
      'inches',
      'line',
      'lyrics',
      'maj',
      'major',
      'mezzosoprano',
      'min',
      'minor',
      'mussym',
      'n',
      'octave',
      'othertext',
      'pedal',
      'pedstar',
      'per',
      'perfect',
      'plain',
      'reh',
      'soprano',
      'tab',
      'tenor',
      'times',
      'top',
      'treble',
      'treble8',
      'up',
      'whereused',
      'y',
   );
   $self->contextdata({
      'Bar Rehearsal' => {
         callback => \&parseBarRehearsal,
         attribute => 'Barline',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Barline' => {
         callback => \&parseBarline,
         attribute => 'Barline',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Bracket' => {
         callback => \&parseBracket,
         attribute => 'Note Attribute',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Bracket Hs' => {
         callback => \&parseBracketHs,
         attribute => 'Note Attribute',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Bracket With' => {
         callback => \&parseBracketWith,
         attribute => 'Note Attribute',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Comment' => {
         callback => \&parseComment,
         attribute => 'Comment',
         lineending => '#pop',
      },
      'Font Name' => {
         callback => \&parseFontName,
         attribute => 'String Special',
         fallthrough => '#pop',
      },
      'Font Size' => {
         callback => \&parseFontSize,
         attribute => 'String Special',
         fallthrough => '#pop',
      },
      'Font Style' => {
         callback => \&parseFontStyle,
         attribute => 'String Special',
         fallthrough => '#pop',
      },
      'Location' => {
         callback => \&parseLocation,
         attribute => 'Normal Text',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Location Probably' => {
         callback => \&parseLocationProbably,
         attribute => 'Location Problably',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Macro' => {
         callback => \&parseMacro,
         attribute => 'Macro',
         lineending => '#pop',
      },
      'Macro Location' => {
         callback => \&parseMacroLocation,
         attribute => 'Location',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Normal' => {
         callback => \&parseNormal,
         attribute => 'Normal Text',
      },
      'Note' => {
         callback => \&parseNote,
         attribute => 'Note',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Note Probably' => {
         callback => \&parseNoteProbably,
         attribute => 'Note',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Parameter' => {
         callback => \&parseParameter,
         attribute => 'Parameter',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Print Command' => {
         callback => \&parsePrintCommand,
         attribute => 'Print Command',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Special Char' => {
         callback => \&parseSpecialChar,
         attribute => 'String Special',
         fallthrough => '#pop',
      },
      'String' => {
         callback => \&parseString,
         attribute => 'String',
      },
      'Tuplet' => {
         callback => \&parseTuplet,
         attribute => 'Tuplet',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Unset' => {
         callback => \&parseUnset,
         attribute => 'Parameter',
         lineending => '#pop',
         fallthrough => '#pop',
      },
      'Value' => {
         callback => \&parseValue,
         attribute => 'Value',
         lineending => '#pop',
         fallthrough => '#pop',
      },
   });
   $self->deliminators('\\s||\\.|\\(|\\)|:|\\!|\\+|,|-|<|=|>|\\%|\\&|\\*|\\/|;|\\?|\\[|\\]|\\^|\\{|\\||\\}|\\~|\\\\');
   $self->basecontext('Normal');
   $self->keywordscase(0);
   $self->initialize;
   bless ($self, $class);
   return $self;
}

sub language {
   return 'Music Publisher';
}

sub parseBarRehearsal {
   my ($self, $text) = @_;
   # String => '\s+'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\s+', 0, 0, 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => 'mupfontnames'
   # attribute => 'Print Command'
   # context => 'Print Command'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontnames', 0, undef, 0, 'Print Command', 'Print Command')) {
      return 1
   }
   # String => 'mupfontstyles'
   # attribute => 'Print Command'
   # context => 'Print Command'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontstyles', 0, undef, 0, 'Print Command', 'Print Command')) {
      return 1
   }
   # String => '\b(let|mnum|num)\b'
   # attribute => 'Barline'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b(let|mnum|num)\\b', 0, 0, 0, undef, 0, '#pop', 'Barline')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseBarline {
   my ($self, $text) = @_;
   # type => 'DetectSpaces'
   if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
      return 1
   }
   # String => '\b(ending|endending|hidechanges)\b'
   # attribute => 'Barline'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b(ending|endending|hidechanges)\\b', 0, 0, 0, undef, 0, '#stay', 'Barline')) {
      return 1
   }
   # String => '\breh(earsal)?\b'
   # attribute => 'Barline'
   # context => 'Bar Rehearsal'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\breh(earsal)?\\b', 0, 0, 0, undef, 0, 'Bar Rehearsal', 'Barline')) {
      return 1
   }
   # String => '\bmnum\s*=\s*[0-9]+'
   # attribute => 'Barline'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bmnum\\s*=\\s*[0-9]+', 0, 0, 0, undef, 0, '#stay', 'Barline')) {
      return 1
   }
   # String => '\bnum\s*=\s*[0-9]+'
   # attribute => 'Barline'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bnum\\s*=\\s*[0-9]+', 0, 0, 0, undef, 0, '#stay', 'Barline')) {
      return 1
   }
   # String => '\blet\s*=\s*("[A-Z]{1,2}")?'
   # attribute => 'Barline'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\blet\\s*=\\s*("[A-Z]{1,2}")?', 0, 0, 0, undef, 0, '#stay', 'Barline')) {
      return 1
   }
   # String => '\bpad\s+[0-9]+'
   # attribute => 'Barline'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bpad\\s+[0-9]+', 0, 0, 0, undef, 0, '#stay', 'Barline')) {
      return 1
   }
   # String => '=([a-z]|_[a-z][a-z_0-9]*)\b'
   # attribute => 'Location'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '=([a-z]|_[a-z][a-z_0-9]*)\\b', 0, 0, 0, undef, 0, '#stay', 'Location')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseBracket {
   my ($self, $text) = @_;
   # attribute => 'Special Char'
   # char => ']'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ']', 0, 0, 0, undef, 0, '#pop', 'Special Char')) {
      return 1
   }
   # String => '[\s;,]+'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[\\s;,]+', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # String => '\b(grace|xnote|cue|diam|up|down)\b'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b(grace|xnote|cue|diam|up|down)\\b', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '\b(slash|len|pad|ho|dist)\s*[0-9.+-]*'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b(slash|len|pad|ho|dist)\\s*[0-9.+-]*', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '\bwith\s*(?=[A-Z"^>.-])'
   # attribute => 'Note Attribute'
   # context => 'Bracket With'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bwith\\s*(?=[A-Z"^>.-])', 0, 0, 0, undef, 0, 'Bracket With', 'Note Attribute')) {
      return 1
   }
   # String => '\bhs\s*(?=[A-Z"])'
   # attribute => 'Note Attribute'
   # context => 'Bracket Hs'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bhs\\s*(?=[A-Z"])', 0, 0, 0, undef, 0, 'Bracket Hs', 'Note Attribute')) {
      return 1
   }
   # String => '=([a-z]|_[a-z][a-z_0-9]*)\b'
   # attribute => 'Location'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '=([a-z]|_[a-z][a-z_0-9]*)\\b', 0, 0, 0, undef, 0, '#stay', 'Location')) {
      return 1
   }
   # String => '\bc\b'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bc\\b', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseBracketHs {
   my ($self, $text) = @_;
   # attribute => 'String'
   # char => '"'
   # context => 'String'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'String', 'String')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseBracketWith {
   my ($self, $text) = @_;
   # attribute => 'String'
   # char => '"'
   # context => 'String'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'String', 'String')) {
      return 1
   }
   # String => '[>.^-]+'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[>.^-]+', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '[\s,]+'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[\\s,]+', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseComment {
   my ($self, $text) = @_;
   # context => '##Alerts'
   # type => 'IncludeRules'
   if ($self->includePlugin('Alerts', $text)) {
      return 1
   }
   return 0;
};

sub parseFontName {
   my ($self, $text) = @_;
   # attribute => 'String Special'
   # char => ')'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop', 'String Special')) {
      return 1
   }
   # String => '[ABCHNPT][RBIX](?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[ABCHNPT][RBIX](?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => 'mupfontnames'
   # attribute => 'String Special'
   # context => 'Font Style'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontnames', 0, undef, 0, 'Font Style', 'String Special')) {
      return 1
   }
   # String => '(PV|previous)(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(PV|previous)(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[^ )"]+'
   # attribute => 'String Error'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[^ )"]+', 0, 0, 0, undef, 0, '#stay', 'String Error')) {
      return 1
   }
   return 0;
};

sub parseFontSize {
   my ($self, $text) = @_;
   # attribute => 'String Special'
   # char => ')'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop', 'String Special')) {
      return 1
   }
   # String => '[-+]?[0-9]+(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[-+]?[0-9]+(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '(PV|previous)(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(PV|previous)(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[^ )"]+'
   # attribute => 'String Error'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[^ )"]+', 0, 0, 0, undef, 0, '#stay', 'String Error')) {
      return 1
   }
   return 0;
};

sub parseFontStyle {
   my ($self, $text) = @_;
   # String => '\s+'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\s+', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => 'mupfontstyles'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontstyles', 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[^ )"]+'
   # attribute => 'String Error'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[^ )"]+', 0, 0, 0, undef, 0, '#stay', 'String Error')) {
      return 1
   }
   return 0;
};

sub parseLocation {
   my ($self, $text) = @_;
   # String => '[\+\-\s]+'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[\\+\\-\\s]+', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'Float'
   if ($self->testFloat($text, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # String => '\btime\b'
   # attribute => 'Location'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\btime\\b', 0, 0, 0, undef, 0, '#stay', 'Location')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseLocationProbably {
   my ($self, $text) = @_;
   # String => '[h-qt-z]|_[a-z][a-z_0-9]*'
   # attribute => 'Location Probably'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[h-qt-z]|_[a-z][a-z_0-9]*', 0, 0, 0, undef, 0, '#pop', 'Location Probably')) {
      return 1
   }
   return 0;
};

sub parseMacro {
   my ($self, $text) = @_;
   # String => 'mupmacrodirectives_start'
   # attribute => 'Macro'
   # beginRegion => 'macro'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupmacrodirectives_start', 0, undef, 0, '#stay', 'Macro')) {
      return 1
   }
   # String => 'mupmacrodirectives_end'
   # attribute => 'Macro'
   # context => '#stay'
   # endRegion => 'macro'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupmacrodirectives_end', 0, undef, 0, '#stay', 'Macro')) {
      return 1
   }
   # String => 'mupmacrodirectives'
   # attribute => 'Macro'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupmacrodirectives', 0, undef, 0, '#stay', 'Macro')) {
      return 1
   }
   # String => '[A-Z][A-Z0-9_]*(?=\.[xynews]\b)'
   # attribute => 'Macro'
   # context => 'Macro Location'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[A-Z][A-Z0-9_]*(?=\\.[xynews]\\b)', 0, 0, 0, undef, 0, 'Macro Location', 'Macro')) {
      return 1
   }
   # String => '[A-Z][A-Z0-9_]*'
   # attribute => 'Macro'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[A-Z][A-Z0-9_]*', 0, 0, 0, undef, 0, '#stay', 'Macro')) {
      return 1
   }
   # attribute => 'Macro'
   # char => '@'
   # context => '#stay'
   # endRegion => 'macro'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '@', 0, 0, 0, undef, 0, '#stay', 'Macro')) {
      return 1
   }
   return 0;
};

sub parseMacroLocation {
   my ($self, $text) = @_;
   # String => '..'
   # attribute => 'Location Probably'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '..', 0, 0, 0, undef, 0, '#pop', 'Location Probably')) {
      return 1
   }
   return 0;
};

sub parseNormal {
   my ($self, $text) = @_;
   # String => 'mupcontexts'
   # attribute => 'Context'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupcontexts', 0, undef, 0, '#stay', 'Context')) {
      return 1
   }
   # String => '\blyrics\b'
   # attribute => 'Lyrics'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\blyrics\\b', 0, 0, 0, undef, 0, '#stay', 'Lyrics')) {
      return 1
   }
   # String => '\b((dashed|dotted)\s+)?(bar|endbar|dblbar|invisbar|repeatstart|repeatboth|repeatend|restart)\b'
   # attribute => 'Barline'
   # context => 'Barline'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b((dashed|dotted)\\s+)?(bar|endbar|dblbar|invisbar|repeatstart|repeatboth|repeatend|restart)\\b', 0, 0, 0, undef, 0, 'Barline', 'Barline')) {
      return 1
   }
   # String => '\bnew(score|page)\b'
   # attribute => 'Newscore'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bnew(score|page)\\b', 0, 0, 0, undef, 0, '#stay', 'Newscore')) {
      return 1
   }
   # String => '\bmultirest\s+[0-9]+\b'
   # attribute => 'Newscore'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bmultirest\\s+[0-9]+\\b', 0, 0, 0, undef, 0, '#stay', 'Newscore')) {
      return 1
   }
   # String => '\bunset\b'
   # attribute => 'Unset Command'
   # context => 'Unset'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bunset\\b', 0, 0, 0, undef, 0, 'Unset', 'Unset Command')) {
      return 1
   }
   # attribute => 'Comment'
   # char => '/'
   # char1 => '/'
   # context => 'Comment'
   # type => 'Detect2Chars'
   if ($self->testDetect2Chars($text, '/', '/', 0, 0, 0, undef, 0, 'Comment', 'Comment')) {
      return 1
   }
   # attribute => 'String'
   # char => '"'
   # context => 'String'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'String', 'String')) {
      return 1
   }
   # String => '\\$'
   # attribute => 'Special Char'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\\\$', 0, 0, 0, undef, 0, '#stay', 'Special Char')) {
      return 1
   }
   # String => 'mupprintcommands'
   # attribute => 'Print Command'
   # context => 'Print Command'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupprintcommands', 0, undef, 0, 'Print Command', 'Print Command')) {
      return 1
   }
   # String => 'mupfontnames'
   # attribute => 'Print Command'
   # context => 'Print Command'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontnames', 0, undef, 0, 'Print Command', 'Print Command')) {
      return 1
   }
   # String => 'mupfontstyles'
   # attribute => 'Print Command'
   # context => 'Print Command'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontstyles', 0, undef, 0, 'Print Command', 'Print Command')) {
      return 1
   }
   # String => '\b((ragged|justified)\s+)?paragraph\b'
   # attribute => 'Print Command'
   # context => 'Print Command'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b((ragged|justified)\\s+)?paragraph\\b', 0, 0, 0, undef, 0, 'Print Command', 'Print Command')) {
      return 1
   }
   # String => 'mupprintspecifiers'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupprintspecifiers', 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => 'mupgraphics'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupgraphics', 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => 'muplocations'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'muplocations', 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => '\bdist(?=\s+[^=])'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bdist(?=\\s+[^=])', 0, 0, 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => 'mupparameters'
   # attribute => 'Parameter'
   # context => 'Parameter'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupparameters', 0, undef, 0, 'Parameter', 'Parameter')) {
      return 1
   }
   # String => '\[(?=(grace|xnote|cue|diam|with|slash|up|down|len|pad|ho|dist|hs|c\b|=))'
   # attribute => 'Special Char'
   # context => 'Bracket'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\[(?=(grace|xnote|cue|diam|with|slash|up|down|len|pad|ho|dist|hs|c\\b|=))', 0, 0, 0, undef, 0, 'Bracket', 'Special Char')) {
      return 1
   }
   # attribute => 'Special Char'
   # char => '}'
   # context => 'Tuplet'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '}', 0, 0, 0, undef, 0, 'Tuplet', 'Special Char')) {
      return 1
   }
   # String => '[]{'
   # attribute => 'Special Char'
   # context => '#stay'
   # type => 'AnyChar'
   if ($self->testAnyChar($text, '[]{', 0, 0, undef, 0, '#stay', 'Special Char')) {
      return 1
   }
   # String => '(<<|>>)'
   # attribute => 'Special Char'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(<<|>>)', 0, 0, 0, undef, 0, '#stay', 'Special Char')) {
      return 1
   }
   # String => '(\(\s*)?((1/4|1/2|1|2|4|8|16|32|64|128|256)\.*\s*)?((\(\s*)?([a-grs]|us)(?!bm)([0-9'?\sxn]|[+-]+|[&#]{1,2}|\(\s*[&#]{1,2}\s*\)|\(\s*[xn]\s*\)|\(\s*[0-9]\s*\))*\)?\s*)*\s*(?=[;~="<A-Z@^]|\b(bm|es?bm|dashed|dotted|tie|slur|alt|hs|ifn?def|else|elseif|endif|with|above)\b)'
   # attribute => 'Note'
   # context => 'Note'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(\\(\\s*)?((1/4|1/2|1|2|4|8|16|32|64|128|256)\\.*\\s*)?((\\(\\s*)?([a-grs]|us)(?!bm)([0-9\'?\\sxn]|[+-]+|[&#]{1,2}|\\(\\s*[&#]{1,2}\\s*\\)|\\(\\s*[xn]\\s*\\)|\\(\\s*[0-9]\\s*\\))*\\)?\\s*)*\\s*(?=[;~="<A-Z@^]|\\b(bm|es?bm|dashed|dotted|tie|slur|alt|hs|ifn?def|else|elseif|endif|with|above)\\b)', 0, 0, 0, undef, 0, 'Note', 'Note')) {
      return 1
   }
   # String => ';\s*(?=[~=<]|\b(bm|es?bm|dashed|dotted|tie|slur|alt|hs|ifn?def|else|elseif|endif)\b)'
   # attribute => 'Normal Text'
   # context => 'Note'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, ';\\s*(?=[~=<]|\\b(bm|es?bm|dashed|dotted|tie|slur|alt|hs|ifn?def|else|elseif|endif)\\b)', 0, 0, 0, undef, 0, 'Note', 'Normal Text')) {
      return 1
   }
   # String => '(1/4|1/2|1|2|4|8|16|32|64|128|256)?mu?[rs]+\s*(?=;)'
   # attribute => 'Note'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(1/4|1/2|1|2|4|8|16|32|64|128|256)?mu?[rs]+\\s*(?=;)', 0, 0, 0, undef, 0, '#stay', 'Note')) {
      return 1
   }
   # String => 'm\s*rpt\s*(?=;)'
   # attribute => 'Note'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, 'm\\s*rpt\\s*(?=;)', 0, 0, 0, undef, 0, '#stay', 'Note')) {
      return 1
   }
   # String => '=([a-z]|_[a-z][a-z_0-9]*)\b'
   # attribute => 'Location'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '=([a-z]|_[a-z][a-z_0-9]*)\\b', 0, 0, 0, undef, 0, '#stay', 'Location')) {
      return 1
   }
   # String => '([a-z]|_[a-z][a-z_0-9]*)\.[xynews]\b'
   # attribute => 'Location'
   # context => 'Location'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '([a-z]|_[a-z][a-z_0-9]*)\\.[xynews]\\b', 0, 0, 0, undef, 0, 'Location', 'Location')) {
      return 1
   }
   # String => '([a-z]|_[a-z][a-z_0-9]*)\.(?=[A-Z])'
   # attribute => 'Location Probably'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '([a-z]|_[a-z][a-z_0-9]*)\\.(?=[A-Z])', 0, 0, 0, undef, 0, '#stay', 'Location Probably')) {
      return 1
   }
   # String => '[(,]\s*(?=([h-qt-z]|_[a-z][a-z_0-9]*)\s*[,)])'
   # attribute => 'Normal Text'
   # context => 'Location Probably'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[(,]\\s*(?=([h-qt-z]|_[a-z][a-z_0-9]*)\\s*[,)])', 0, 0, 0, undef, 0, 'Location Probably', 'Normal Text')) {
      return 1
   }
   # String => '[(,]\s*(?=[a-grs]\s*[,)])'
   # attribute => 'Normal Text'
   # context => 'Note Probably'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[(,]\\s*(?=[a-grs]\\s*[,)])', 0, 0, 0, undef, 0, 'Note Probably', 'Normal Text')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   # String => '[0-9.]*\s*til\s*(([0-9]+m(\s*\+\s*[0-9.]+)?)|[0-9.]+)\s*;'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[0-9.]*\\s*til\\s*(([0-9]+m(\\s*\\+\\s*[0-9.]+)?)|[0-9.]+)\\s*;', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # String => '[0-9]*[a-z_]+'
   # attribute => 'Error'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[0-9]*[a-z_]+', 0, 0, 0, undef, 0, '#stay', 'Error')) {
      return 1
   }
   return 0;
};

sub parseNote {
   my ($self, $text) = @_;
   # String => '(\bdashed\s+|\bdotted\s+)?(<(/n|\\n|n/|n\\|[a-g]([+-]*|[0-7]))?>|tie|slur|[~])'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(\\bdashed\\s+|\\bdotted\\s+)?(<(/n|\\\\n|n/|n\\\\|[a-g]([+-]*|[0-7]))?>|tie|slur|[~])', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '^(/|[a-g]([+-]*|[0-7]))'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '^(/|[a-g]([+-]*|[0-7]))', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '\bbm\b(\s+with\s+staff\s+(below|above)\b)?'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bbm\\b(\\s+with\\s+staff\\s+(below|above)\\b)?', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '\bes?bm\b'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bes?bm\\b', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '\balt\s+[1-9]\b'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\balt\\s+[1-9]\\b', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # String => '\bhs\s+'
   # attribute => 'Note Attribute'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bhs\\s+', 0, 0, 0, undef, 0, '#stay', 'Note Attribute')) {
      return 1
   }
   # attribute => 'String'
   # char => '"'
   # context => 'String'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'String', 'String')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   return 0;
};

sub parseNoteProbably {
   my ($self, $text) = @_;
   # String => '[a-grs]*'
   # attribute => 'Note'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[a-grs]*', 0, 0, 0, undef, 0, '#pop', 'Note')) {
      return 1
   }
   return 0;
};

sub parseParameter {
   my ($self, $text) = @_;
   # attribute => 'Normal Text'
   # char => '='
   # context => 'Value'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '=', 0, 0, 0, undef, 0, 'Value', 'Normal Text')) {
      return 1
   }
   # String => '\s+'
   # attribute => 'Parameter'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\s+', 0, 0, 0, undef, 0, '#stay', 'Parameter')) {
      return 1
   }
   return 0;
};

sub parsePrintCommand {
   my ($self, $text) = @_;
   # type => 'DetectSpaces'
   if ($self->testDetectSpaces($text, 0, undef, 0, '#stay', undef)) {
      return 1
   }
   # String => 'mupfontstyles'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontstyles', 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => '\bnl\b'
   # attribute => 'Print Command'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\bnl\\b', 0, 0, 0, undef, 0, '#stay', 'Print Command')) {
      return 1
   }
   # String => '\([0-9]+\)'
   # attribute => 'Print Command'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\([0-9]+\\)', 0, 0, 0, undef, 0, '#pop', 'Print Command')) {
      return 1
   }
   return 0;
};

sub parseSpecialChar {
   my ($self, $text) = @_;
   # attribute => 'String Special'
   # char => ')'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ')', 0, 0, 0, undef, 0, '#pop', 'String Special')) {
      return 1
   }
   # String => 'mupspecialchars'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupspecialchars', 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => 'mupmusicchars'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupmusicchars', 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[AaEeOo]['`:^~](?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[AaEeOo][\'`:^~](?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[IiUu]['`:^](?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[IiUu][\'`:^](?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[Nn]~(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[Nn]~(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[Yy]:(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[Yy]:(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[LlOo]/(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[LlOo]/(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[Cc],(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[Cc],(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '(>>|<<|``|'')(?=\))'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '(>>|<<|``|\'\')(?=\\))', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[^)"]+'
   # attribute => 'String Error'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[^)"]+', 0, 0, 0, undef, 0, '#stay', 'String Error')) {
      return 1
   }
   return 0;
};

sub parseString {
   my ($self, $text) = @_;
   # attribute => 'String'
   # char => '"'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, '#pop', 'String')) {
      return 1
   }
   # String => '[\\][][{}%#"nb|^:,\\/ ]'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[\\\\][][{}%#"nb|^:,\\\\/ ]', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '\('
   # attribute => 'String Special'
   # context => 'Special Char'
   # type => 'StringDetect'
   if ($self->testStringDetect($text, '\\(', 0, 0, 0, undef, 0, 'Special Char', 'String Special')) {
      return 1
   }
   # String => '\f('
   # attribute => 'String Special'
   # context => 'Font Name'
   # type => 'StringDetect'
   if ($self->testStringDetect($text, '\\f(', 0, 0, 0, undef, 0, 'Font Name', 'String Special')) {
      return 1
   }
   # String => '\s('
   # attribute => 'String Special'
   # context => 'Font Size'
   # type => 'StringDetect'
   if ($self->testStringDetect($text, '\\s(', 0, 0, 0, undef, 0, 'Font Size', 'String Special')) {
      return 1
   }
   # String => '\\v\(-?[0-9]{1,3}\)'
   # attribute => 'String Special'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\\\v\\(-?[0-9]{1,3}\\)', 0, 0, 0, undef, 0, '#stay', 'String Special')) {
      return 1
   }
   # String => '[~<>|^]'
   # attribute => 'String Lyrics'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[~<>|^]', 0, 0, 0, undef, 0, '#stay', 'String Lyrics')) {
      return 1
   }
   # String => '[-+]?[0-9]+\|'
   # attribute => 'String Lyrics'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[-+]?[0-9]+\\|', 0, 0, 0, undef, 0, '#stay', 'String Lyrics')) {
      return 1
   }
   return 0;
};

sub parseTuplet {
   my ($self, $text) = @_;
   # String => '\s*(above|below)?\s*[0-9]{1,2}(y|n|num)?(\s*,\s*[0-9]{1,2}\.?([+][0-9]{1,2}\.?)*)?'
   # attribute => 'Tuplet'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\s*(above|below)?\\s*[0-9]{1,2}(y|n|num)?(\\s*,\\s*[0-9]{1,2}\\.?([+][0-9]{1,2}\\.?)*)?', 0, 0, 0, undef, 0, '#pop', 'Tuplet')) {
      return 1
   }
   return 0;
};

sub parseUnset {
   my ($self, $text) = @_;
   # String => 'mupparameters'
   # attribute => 'Parameter'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupparameters', 0, undef, 0, '#stay', 'Parameter')) {
      return 1
   }
   # String => '[\s,]+'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[\\s,]+', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # String => '\w+'
   # attribute => 'Error'
   # context => '#pop'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\w+', 0, 0, 0, undef, 0, '#pop', 'Error')) {
      return 1
   }
   return 0;
};

sub parseValue {
   my ($self, $text) = @_;
   # attribute => 'Normal Text'
   # char => ';'
   # context => '#pop'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, ';', 0, 0, 0, undef, 0, '#pop', 'Normal Text')) {
      return 1
   }
   # String => '[\s,&()-]+'
   # attribute => 'Normal Text'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[\\s,&()-]+', 0, 0, 0, undef, 0, '#stay', 'Normal Text')) {
      return 1
   }
   # String => 'mupvalues'
   # attribute => 'Value'
   # context => '#stay'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupvalues', 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # String => 'mupfontnames'
   # attribute => 'Value'
   # context => '#pop'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontnames', 0, undef, 0, '#pop', 'Value')) {
      return 1
   }
   # String => 'mupfontstyles'
   # attribute => 'Value'
   # context => '#pop'
   # type => 'keyword'
   if ($self->testKeyword($text, 'mupfontstyles', 0, undef, 0, '#pop', 'Value')) {
      return 1
   }
   # String => '\b[1-9][0-9]*/(1|2|4|8|16|32|64|128)n?\b'
   # attribute => 'Value'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b[1-9][0-9]*/(1|2|4|8|16|32|64|128)n?\\b', 0, 0, 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # String => '\b[a-g][#&]?'?([0-9]\b)?'
   # attribute => 'Value'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '\\b[a-g][#&]?\'?([0-9]\\b)?', 0, 0, 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # String => '[0-7][#&]'
   # attribute => 'Value'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[0-7][#&]', 0, 0, 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # String => 'r\b'
   # attribute => 'Value'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, 'r\\b', 0, 0, 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # attribute => 'Value'
   # context => '#stay'
   # type => 'Float'
   if ($self->testFloat($text, 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # attribute => 'Value'
   # context => '#stay'
   # type => 'Int'
   if ($self->testInt($text, 0, undef, 0, '#stay', 'Value')) {
      return 1
   }
   # attribute => 'String'
   # char => '"'
   # context => 'String'
   # type => 'DetectChar'
   if ($self->testDetectChar($text, '"', 0, 0, 0, undef, 0, 'String', 'String')) {
      return 1
   }
   # context => 'Macro'
   # type => 'IncludeRules'
   if ($self->includeRules('Macro', $text)) {
      return 1
   }
   # String => '[a-z][a-z0-9]*'
   # attribute => 'Error'
   # context => '#stay'
   # type => 'RegExpr'
   if ($self->testRegExpr($text, '[a-z][a-z0-9]*', 0, 0, 0, undef, 0, '#stay', 'Error')) {
      return 1
   }
   return 0;
};


1;

__END__

=head1 NAME

Syntax::Highlight::Engine::Kate::Music_Publisher - a Plugin for Music Publisher syntax highlighting

=head1 SYNOPSIS

 require Syntax::Highlight::Engine::Kate::Music_Publisher;
 my $sh = new Syntax::Highlight::Engine::Kate::Music_Publisher([
 ]);

=head1 DESCRIPTION

Syntax::Highlight::Engine::Kate::Music_Publisher is a  plugin module that provides syntax highlighting
for Music Publisher to the Syntax::Haghlight::Engine::Kate highlighting engine.

This code is generated from the syntax definition files used
by the Kate project.
It works quite fine, but can use refinement and optimization.

It inherits Syntax::Higlight::Engine::Kate::Template. See also there.

=cut

=head1 AUTHOR

Hans Jeuken (haje <at> toneel <dot> demon <dot> nl)

=cut

=head1 BUGS

Unknown. If you find any, please contact the author

=cut

