All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sweble.wikitext.lazy.parser.HorizontalRule.rats Maven / Gradle / Ivy

There is a newer version: 3.1.9
Show newest version
/**
 * Copyright 2011 The Open Source Research Group,
 *                University of Erlangen-Nürnberg
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/*!
 *
 * Horizontal Rule
 * ---------------
 *
 *   Grammar:
 *     - '----' '-'*
 *
 *   AST node:
 *     Name        : HorizontalRule
 *     Extends     : LeafNode
 *     NodeType    : org.sweble.wikitext.lazy.AstNodeTypes.NT_HORIZONTAL_RULE
 *
 */

module org.sweble.wikitext.lazy.parser.HorizontalRule;




// -- Horizontal Rule --[ State Aware Memoization ]-----------------------------

noinline transient AstNode HorizontalRule =
 ^{
    StateAwareResult r = (StateAwareResult) pHorizontalRuleMemoized(yyBase);
    final LazyParserContext context = getContext();
    Result yyResult = r.getResult(context);
    if (yyResult == null)
      yyResult = r.setResult(context, pHorizontalRuleTransient(yyBase));
    if (returnTrue(r))
      return yyResult;
  }
;

noinline memoized AstNode HorizontalRuleMemoized =
 ^{
    Result yyResult = new StateAwareResult("HorizontalRule", getContext(), pHorizontalRuleTransient(yyBase));
    if (returnTrue(yyResult))
      return yyResult;
  }
;




// -- Horizontal Rule ----------------------------------------------------------

noinline transient AstNode HorizontalRuleTransient =
    "---" &{ accept(ParserAtoms.HORIZONTAL_RULE) } yyValue:HorizontalRuleChoice
  / "---"
    {
      yyValue = new Text("---");
    }
;

private inline AstNode HorizontalRuleChoice =
    more:'-'+
    {
      int dashes = 3 + more.size();

      yyValue = new HorizontalRule();

      if (isGatherRtData())
        addRtData(yyValue, joinRt(StringUtils.strrep('-', dashes)));
    }
  / &{ isWarningsEnabled() } HorizontalRuleAutoCorrect
;

private inline AstNode HorizontalRuleAutoCorrect =
  &{ isWarningLevelEnabled(WS_NONE) }
  {
    yyValue = new Text("---");

    fileLooksLikeWarning(
        yyValue,
        makeSpan(yyStart - 3, yyStart),
        WS_NONE,
        "Horizontal Rule",
        "a horizontal rule consists of at least 4 dashes");
  }
;




// -- End of file -------------------------------------------------------------




© 2015 - 2024 Weber Informatics LLC | Privacy Policy