module Novika::Quote
 
  Overview
Includers are Novika quotes, which are known as strings in most other programming languages.
Quotes are optimized for the ASCII-only case. Also, they
treat single String::Graphemes separately from strings
of those, and cache grapheme counts here and there.
The slowest operations on quotes are #slice_at and #at
over non- ASCII quotes. Both are currently O(N) in terms
of iterations only; they do a lot of other work besides
iteration as well.
When you are slow, being even slower doesn't matter that much anymore. This is the case with Novika.
And yes, quotes do rely on the experimental grapheme API.
Included Modules
Direct including types
Defined in:
novika/forms/quote.crConstant Summary
- 
        EFFECT_BOUND_TAKE = 12
- 
        Specifies how many characters to take from the left and right boundaries of the quote for a shorter representation in #effect.
- 
        EFFECT_MAX_CHARS = 32
- 
        Specifies the maximum amount of characters to display before the quote gets cut off in #effect(seeForm#effect).
- 
        EMPTY = StringQuote.new("", count: 0, ascii_only: true)
- 
        The empty quote. 
Constructors
- 
        .new(string : String, count = string.grapheme_size, ascii = string.ascii_only?)
        
          Creates a quote from string. 
- 
        .new(grapheme : String::Grapheme)
        
          Creates a quote from grapheme. 
- 
        .new(char : Char)
        
          Creates a quote from char. 
Class Method Summary
Instance Method Summary
- 
        #==(other : Quote) : Bool
        
          Returns whether this quote variant consists of the same graphemes as other. 
- 
        #at(b : Int32, e : Int32) : Quote
        
          Returns a subquote from b to e. 
- 
        #at(index : Int32) : GraphemeQuote
        
          Returns the grapheme at index as Quote, or dies.
- 
        #at?(index : Int32) : GraphemeQuote | Nil
        
          Returns the grapheme at index as Quote, or nil.
- 
        #cached_count? : Int32 | Nil
        
          Returns the cached count of graphemes in this quote variant. 
- 
        #count : Int32
        
          Returns the amount of graphemes in this quote variant. 
- 
        #desc(io : IO)
        
          Appends a string description of this form to io. 
- 
        #each_occurrence_of(pattern : Form, &)
        
          Yields occurrences of the given pattern in this quote. 
- 
        #effect(io)
        
          Generates and returns a description for the stack effect of this form. 
- 
        #empty? : Bool
        
          Returns whether this quote is empty. 
- 
        #first_byte? : UInt8 | Nil
        
          Returns the first byte (or nil) in this quote. 
- 
        #fit(total : Int, ellipsis : _) : Quote
        
          Ensures this quote is of total characters or less. 
- 
        #ord? : Int32 | Nil
        
          Returns the Unicode codepoint for the first character in this quote, or nil if this quote is empty. 
- 
        #pad(total : Int, padder : _, side : PadSide) : Quote
        
          Pads this quote with padder until it becomes total perceived characters long. 
- 
        #replace_all(pattern : Quote, repl : Quote) : Quote
        
          Replaces instances of pattern with repl. 
- 
        #slice_at(slicept : Int32) : Tuple(Quote, Quote)
        
          Slices this quote into two quotes at slicept. 
- 
        #slice_at?(slicept : Int32) : Tuple(Quote, Quote) | Nil
        
          Slices this quote into two quotes at slicept. 
- 
        #stitch(other : Quote) : Quote
        
          Stitches (concatenates) this and other quote variants, and returns the resulting quote. 
- 
        #string : String
        
          Converts this quote variant to String.
- 
        #to_byteslice
        
          Returns an immutable Byteslicerepresentation of this quote.
- 
        #to_quote : Quote
        
          Returns this form's quote representation. 
Instance methods inherited from module Novika::Form
  
  
    
      a(type : T.class) : T forall T
    a, 
    
  
    
      desc(io : IO)desc : String desc, die(details : String) die, effect(io)
effect effect, on_open(engine : Engine) : self on_open, on_parent_open(engine : Engine) : self on_parent_open, onto(block : Block) : self onto, sel(a, b) sel, to_quote : Quote to_quote
Instance methods inherited from module Novika::Schedulable
  
  
    
      schedule(engine : Engine, stack : Block)
    schedule, 
    
  
    
      schedule!(engine : Engine, stack : Block)
    schedule!
    
  
    
    
    
  
Constructor Detail
Creates a quote from string.
count can be provided if the amount of graphemes in string is known.
Class Method Detail
Instance Method Detail
Returns whether this quote variant consists of the same graphemes as other.
Returns a subquote from b to e. Clamps b and e to bounds of this quote. Returns an empty quote if this quote is empty without regarding b and e.
Both ends are inclusive.
Returns the grapheme at index as Quote, or nil.
Returns the cached count of graphemes in this quote variant. Returns nil if there is no cached count.
Appends a string description of this form to io.
Generates and returns a description for the stack effect of this form.
For blocks and builtins, tries to extract a ( ... -- ... )
(but see EFFECT_PATTERN) from their corresponding
comment. If could not extract or no comment, returns
'a block' for blocks and 'native code' for builtins.
Ensures this quote is of total characters or less. In case of overflow, truncates with ellipsis. If even ellipsis cannot fit, truncates ellipsis so that it is of total characters. Returns the resulting quote.
Returns the Unicode codepoint for the first character in this quote, or nil if this quote is empty.
Pads this quote with padder until it becomes total perceived characters long. The side where the padding should apply is specified by side. Returns the resulting quote.
Replaces instances of pattern with repl. Returns the resulting quote.
Slices this quote into two quotes at slicept. Returns the two resulting quotes. Dies if slicept is out of bounds.
Slices this quote into two quotes at slicept. Returns the two resulting quotes. Returns nil if slicept is out of bounds.
Stitches (concatenates) this and other quote variants, and returns the resulting quote.