Loading ...
Sorry, an error occurred while loading the content.

Re: Indenting Based on Unbalanced Paranthesis

Expand Messages
  • Benjamin R. Haskell
    [Reversed the top-posting, per list preference] ... Don t write the indent file if you don t have to. What language are you trying to indent? Indenting gets
    Message 1 of 7 , Nov 29, 2012
    View Source
    • 0 Attachment
      [Reversed the top-posting, per list preference]

      On Thu, Nov 29, 2012 at 5:24 PM, Danny Gratzer wrote:

      > I am writing an indentation script for a simple language. The language
      > is has very simple constructs and the indentation really only has 3
      > rules:
      >
      > 1. A comment has goes from a // until a newline, anything in a comment
      > should be ignored.
      >
      > 2. If the line above contains a semi-colon, the indentation should be 0.
      >
      > 3. Otherwise, indent to 1 more than the most recent unbalanced ( and
      > to 4 spaces if all paranthesis are balanced.
      >
      > The last rule is kinda stumping me, does anyone have any advice?

      Don't write the indent file if you don't have to. What language are
      you trying to indent?

      Indenting gets slow if you have to scan the whole file. Unless you're
      never dealing with at-all long files. Is there anything other than
      semi-colons and parenthesis (im)balance that can be used for resetting
      indentation?


      On Thu, Nov 29, 2012 at 5:27 PM, Danny Gratzer wrote:

      > Oh actually 1 more rule
      >
      > 4. If the line above matches "let:$", or "in:$" where $ is the end of
      > line, indent by 1 more than this line.

      On Thu, 29 Nov 2012, Danny Gratzer wrote:

      > Excuse me, rule 3. should read:
      >
      > 3. Otherwise, indent to 1 more than the most recent unbalanced ( and to the
      > same level as the last line if all parenthesis are balanced and no other
      > rules apply.

      It'd be helpful to see some samples of what you're trying to indent.
      Especially to see whether the scan all the way to the start of the file
      can be avoided.

      --
      Best,
      Ben

      --
      You received this message from the "vim_use" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php
    • Ben Fritz
      ... I d try using the searchpair() or searchpairpos() functions for an exact solution which works in all cases. Or a simpler solution might just check the
      Message 2 of 7 , Nov 29, 2012
      View Source
      • 0 Attachment
        On Thursday, November 29, 2012 5:24:53 PM UTC-6, Danny Gratzer wrote:
        > I am writing an indentation script for a simple language. The language is has very simple constructs and the indentation really only has 3 rules:
        >
        >
        > 1. A comment has goes from a // until a newline, anything in a comment should be ignored.
        >
        >
        >
        > 2. If the line above contains a semi-colon, the indentation should be 0.
        >
        >
        > 3. Otherwise, indent to 1 more than the most recent unbalanced ( and to 4 spaces if all paranthesis are balanced.
        >
        >
        >
        > The last rule is kinda stumping me, does anyone have any advice?
        >
        >

        I'd try using the searchpair() or searchpairpos() functions for an exact solution which works in all cases.

        Or a simpler solution might just check the previous line for an opening (, but this will be hard to get right for nested parentheses groups.

        --
        You received this message from the "vim_use" maillist.
        Do not top-post! Type your reply below the text you are replying to.
        For more information, visit http://www.vim.org/maillist.php
      • Danny Gratzer
        Apologizes for the top posting, No indenting exists for this previously, it s a language (currently unnamed) I m writing as an experiment in functional
        Message 3 of 7 , Nov 29, 2012
        View Source
        • 0 Attachment
          Apologizes for the top posting,

          No indenting exists for this previously, it's a language (currently unnamed) I'm writing as an experiment in functional programming and to learn to parse.


          I can't think of any other markers really, the syntax for the language is pretty minimalistic, here's a quicksort implementation that has 95% of the language in it:

          quicksort (ls) := 
              if (= (length ls) 1) 
                  ls
                  (let
                      pivot = car ls,
                      less  = filter (lambda(x) -> < x pivot) (cdr ls),
                      more  = filter (lambda(x) -> >= x pivot) (cdr ls),
                      in:
                          append (quicksort less) (cons pivot (quicksort more)));

          main := quicksort [1 2 3 5 18 4 1 4 1 4]

          Since () are used to group function applications their extremely common. I was originally thinking a syntax similar to Scheme's or Common Lisp's might do it, but I'm confused how they manage it based on their indent files, I'm still pretty newbie-ish at this sort of vim stuff.
           


          On Thu, Nov 29, 2012 at 6:08 PM, Benjamin R. Haskell <vim@...> wrote:
          [Reversed the top-posting, per list preference]


          On Thu, Nov 29, 2012 at 5:24 PM, Danny Gratzer wrote:

          I am writing an indentation script for a simple language. The language is has very simple constructs and the indentation really only has 3 rules:

          1. A comment has goes from a // until a newline, anything in a comment should be ignored.

          2. If the line above contains a semi-colon, the indentation should be 0.

          3. Otherwise, indent to 1 more than the most recent unbalanced ( and to 4 spaces if all paranthesis are balanced.

          The last rule is kinda stumping me, does anyone have any advice?

          Don't write the indent file if you don't have to. What language are you trying to indent?

          Indenting gets slow if you have to scan the whole file.  Unless you're never dealing with at-all long files.  Is there anything other than semi-colons and parenthesis (im)balance that can be used for resetting indentation?



          On Thu, Nov 29, 2012 at 5:27 PM, Danny Gratzer wrote:

          Oh actually 1 more rule

          4. If the line above matches "let:$", or "in:$" where $ is the end of
          line, indent by 1 more than this line.

          On Thu, 29 Nov 2012, Danny Gratzer wrote:

          Excuse me, rule 3. should read:

          3. Otherwise, indent to 1 more than the most recent unbalanced ( and to the
          same level as the last line if all parenthesis are balanced and no other
          rules apply.

          It'd be helpful to see some samples of what you're trying to indent. Especially to see whether the scan all the way to the start of the file can be avoided.

          --
          Best,
          Ben

          --
          You received this message from the "vim_use" maillist.
          Do not top-post! Type your reply below the text you are replying to.
          For more information, visit http://www.vim.org/maillist.php



          --
          Danny Gratzer

          --
          You received this message from the "vim_use" maillist.
          Do not top-post! Type your reply below the text you are replying to.
          For more information, visit http://www.vim.org/maillist.php
        • David Fishburn
          ... ... Not sure if you have looked into this plugin: IndentAnything : Write indentations or enhance existing indentations without writing code
          Message 4 of 7 , Nov 30, 2012
          View Source
          • 0 Attachment
            On Thu, Nov 29, 2012 at 6:24 PM, Danny Gratzer <danny.gratzer@...> wrote:
            I am writing an indentation script for a simple language. The language is has very simple constructs and the indentation really only has 3 rules:

            ...

            Not sure if you have looked into this plugin:

            IndentAnything : Write indentations or enhance existing indentations without writing code 

            It can make writing an indent file very easy, it really depends on your rules and how anal you might want to be.

            Certainly worth a look.

            HTH,
            David
              

            --
            You received this message from the "vim_use" maillist.
            Do not top-post! Type your reply below the text you are replying to.
            For more information, visit http://www.vim.org/maillist.php
          Your message has been successfully submitted and would be delivered to recipients shortly.