From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

NAME

Syntax::Kamelon::Builder - Builds a lexer from an xml file

SYNOPSIS

my $lexer = Syntax::Kamelon::Builder->new(%options);

DESCRIPTION

This module inherits Syntax::Kamelon::XMLData.

The constructor does not return an object but a data structure called a lexer. Below more details of what it looks like. You will never have the opportunity to call any of it's methods. It creates a lexer and says bye bye. If fact you never have to create an instance of it. Kamelon does that for you.

OPTIONS

The constructor is called with a paired list or hash of options as parameters. You must use the following options.

engine => $ref

A reference to the main Kamelon object.

xmlfile => $filename

Full path and file name of the xml file to load.

STRUCTURE OF A LEXER

Global overview
my $lexer = {
basecontext => 'first',
contexts => {
first => {
},
second => {
}
},
deliminators => ".|(|)|:|!|+|,|-|<|=|>|%|&|*|/|;|?|[|]|^|{|||}|~|\\",
lists => {
mycolors => {
red => 1,
yellow => 1,
},
}
syntax => 'Name',
};

Notice that lists are in fact hashes. This is for faster lookup. After all we only need to know if an entry exists or not.

The contexts in detail
my $context = {
attribute => $something,
callbacks => [ #the rules in action
[\&testMethod, @options, $contextshifter, $attribute, @resultparsers],
[\&testMethod2, @options2, $contextshifter2, $attribute2, @resultparsers2],
#etcetera
],
debug => [
[$reftohash, #all the data that was previously in the items key of the context hash.
],
[],
#etcetera
],
dynamic => 0, #or 1
emptycontext => \&contextshifter,
endcontext => \&contextshifter,
fallthroughcontext => undef, #or also a context shifter
info => {
#All of the data from the context hash except the items key (the rules)
}
};
Context shifters
Result parsers

SYSTEM METHODS

AttributeGet($attribute);

Returns the style tag belonging to $attribute in the Attributes hash. If it cannot find it it will log a warning and return the style tag belonging to the current context.

AttributeGetF($attribute);

Uses AttributeGet to obtain the styel tag. Returns the format information belonging to the style tag.

ContextExists($contextname);

Returns true if the context exists in the contexts hash.

CurContext($contextname);

Sets and returns the current context.

CurContextIsDynamic

Returns true if the current context is dynamic.

CurRuleI(<$rulenumber>);

Sets and returns the current rule within the current context.

DeliminatorsI(<$rulenumber>);

Sets and returns the composed deliminators string. It is composed of the general deliminators, the WaekDeliminator and the AdditionalDeliminator.

Engine

Returns a reference to the main Kamelon object.

LogWarning($message);

And exacter Warning mechanism than Kamelon has.

RuleGetArgs($reftorule, @optionstoretrieve));

Returns a list of the values belonging to @optionstoretrieve.

RuleGetChar($char);

Generally a char data type consists of one character. However, an escaped character has two. This methods returns the escaped character also as the real character. so a newline for a \n etc.

Setup

The initiater of the building process.

SetupContext($lexer, $contextname, $reftodata);

Sets up context and stores it in $lexer.

SetupContextRules($lexer, $contextname, $reftodata);

Sets up the rules for $contextname.

SetupContextShifter($lexer, $contextname);

Creates an anonymous sub that does a context shift when executed.

SetupRuleXXXXX($reftorule);

All these methods set up specific rules inside a context.

SetupRuleAnyChar
SetupRuleDefault
SetupRuleDetectChar
SetupRuleDetect2Chars
SetupRuleKeyword
SetupRuleLineContinue
SetupRuleRangeDetect
SetupRuleRegMinimal
SetupRuleRegExpr
SetupRuleStringDetect
SyntaxExists

Checks if a syntax is available before creating a context shifter that uses it.

AUTHOR AND COPYRIGHT

This module is written and maintained by:

Hans Jeuken < hanje at cpan dot org >

Copyright (c) 2017 - 2023 by Hans Jeuken, all rights reserved.

Published under the same license as Perl.

SEE ALSO

Syntax::Kamelon, Syntax::Kamelon::Debugger, Syntax::Kamelon::Diagnostics, Syntax::Kamelon::Indexer, Syntax::Kamelon::XMLData, Syntax::Kamelon::Format::Base, Syntax::Kamelon::Format::ANSI, Syntax::Kamelon::Format:HTML4