Sergey
Sergey

Reputation: 5476

How to retrieve less variable using dotless asp.net

I'm using dotless library for compile .less files in my asp.net web-site. And I want to get value of some variable by name.

For example, I have code like this:

@FONT_SIZE: 10px;
@TEXT_COLOR: red;

So, how can I get font size by "FONT_SIZE" name? I found FindVariable method in Env class, but I don't understand how to use it.

Upvotes: 0

Views: 759

Answers (3)

Sergey
Sergey

Reputation: 5476

I have solved my issue using this code:

string GetLessVariableByName(string name, string lessContent) {
    int optimisation = 1;
    Func<IStylizer> defaultStylizer = () => new PlainStylizer();
    Func<IImporter> defaultImporter = () => new Importer();
    Func<Parser> defaultParser = () => new Parser(optimisation, defaultStylizer(), defaultImporter());
    Func<Env> defaultEnv = () => { return new Env(); };
    Env env = defaultEnv();
    Parser parser = defaultParser();
    var tree = parser.Parse(lessContent.Trim(), "tmp.less");
    var rule = tree.Rules.ToArray()[0];
    Node node = rule.Evaluate(env);
    var variableValue = tree.Variable(name, node);

    return variableValue == null ? null : variableValue.Value.ToString();
}

Upvotes: 1

thejason
thejason

Reputation: 51

Yes, I would use:

int optimisation = 1; Func<IStylizer> defaultStylizer = () => new PlainStylizer(); Func<IImporter> defaultImporter = () => new Importer(); Func<Parser> defaultParser = () => new Parser(optimisation, defaultStylizer(), defaultImporter()); Func<Env> defaultEnv = () => { return new Env(); }; Env env = defaultEnv(); Parser parser = defaultParser(); var tree = parser.Parse(lessContent.Trim(), "tmp.less"); var rule = tree.Rules.ToArray()[0]; Node node = rule.Evaluate(env);

Question though, where is the ToArray() coming from on the var rule = tree.Rules.ToArray()[0]; line?

Thanks, Jason

Upvotes: 0

Bass Jobsen
Bass Jobsen

Reputation: 49044

I wonder if your env will be static (needed to read your value). I think you should read your less file as text and use something like a regular expression to get your value. See: Import LESS from server howto read your less files. The same problem will be discussed here: https://groups.google.com/forum/#!topic/dotless/V3SROjkTpM8

Upvotes: 0

Related Questions