New UserDefinedLanguage module

Loreia2
2011-07-30
2015-04-30
<< < 1 .. 10 11 12 13 14 > >> (Page 12 of 14)
  • Loreia2
    Loreia2
    2013-02-12

    Hi jjker,

    try to use "Folding in code 2" style.
    "Folding in code 1" is meant for special operators like { }.

    BR,
    Loreia

     
    • jjker
      jjker
      2013-02-18

      Thank you Loreia
      It is OK now with "Folding in code 2".

      BR

      Jean-Jacques

       
  • Ancient
    Ancient
    2013-02-13

    Hi,

    Is there any way to use ASCII control characters as delimiters? Or rather, use the hex value for delimiters?

    For example (replace the \x1B with the actual character):

    KEY \x1B\x1BVALUE\x1B\x1B

    I would like the \x1B\x1BVALUE\x1B\x1B part to be highlighted. I've tried putting in various representations of the character, but it doesn't seem to work...

    Thanks

     
  • Loreia2
    Loreia2
    2013-02-13

    Hi Ancient ,

    any value below ' ' (ASCII 32) is treated as white space, and cannot be used as Delimiter (or anything else in UDL).

    BR,
    Loreia

     
  • Gin
    Gin
    2013-02-14

    EDIT: I fixed my earlier problem. while the program itself will recognize all comments starting with a semicolon (aside from those inside strings obviously) I have them highlight by using 2 semicolons

    My last problem would be...
    is there any way to highlight variables

    for example ONScripter-EN uses a command called numalias to create number variables the order is, command, variable name, number alias (basically it's equivalent of a pointer)

    numalias mylife, 801 (tabs don't affect it)

    so that would be my last issue... is there a way to highlight number variables (not to concerned on character variables since there are few) names

     
    Last edit: Gin 2013-02-16
  • Loreia2
    Loreia2
    2013-02-16

    Hi Erwin,

    no, you can't highlight variables, because variables can have any name. Thus you can't specify them in UDL. The only exception would be naming all your variables with a common prefix, say varSOMENAME. Now you could specify Keyword1 type as 'var' (without quotes) and tick "Prefix" check box.

    BR,
    Loreia

     
  • Gin
    Gin
    2013-02-16

    I feared as much but this is a whole lot better than nothing since there nothing else I'm aware of to highlight this language. Thank you all I need is some help figuring out the two folding problems I been having and I'm set.

     
  • Gin
    Gin
    2013-02-16

    I feared as much but this is a whole lot better than nothing since there nothing else I'm aware of to highlight this language. Thank you all I need is some help figuring out the two folding problems I been having and I'm set.

     
  • Loreia2
    Loreia2
    2013-02-16

    Hi Erwin,

    you can't fold based on labels. The only thing you can do is to use "Folding in comment" style to create custom folding points:
    http://udl20.weebly.com/folding-in-comment.html

    BR,
    Loreia

     
  • Rachel Ayoroa
    Rachel Ayoroa
    2013-03-03

    Hi Loreia2. Fist. Thank you for making this UDL feature! It's pretty freaking sweat. I couldn't find anything comparable in gedit, programmer's notepad, etc etc

    http://i.imgur.com/PGVYesg.png

    In the above file, I set up my delimiters to close with ((EOL)) Is there anyway to do something like close with ((EOL)) OR | so that I could have my comments be recognized?

     
  • Loreia2
    Loreia2
    2013-03-03

    Hi Rachel,

    that one is very easy in UDL. Just allow nesting of comments within Delimiter. Go to Styler of Delimiter defined as "start:m end:((EOL))" and in Nesting section tick Comments check box. As easy as that, I guess it really is "pretty freaking sweat" :-)

    BR,
    Loreia

     
  • Rachel Ayoroa
    Rachel Ayoroa
    2013-03-04

    Yikes that was easy. I should have spotted that. Thanks!

     
  • usacad1
    usacad1
    2013-03-08

    Hi Loreia,

    I've stumbled upon a problem with UDL 2.1 and definition of number styler. Maybe its me, but I can't get UDL2.1 to recognize this as a hex number: 16#F0F00

    I am using "Prefix 2" for 16#, then A-F in "Extras 1". UDL2.1 recognizes a number up to the first zero; i.e., 16#F0 is a number, but I can't find a way to recognize the other F00 as a number.

    Do you have any suggestion?

    Thanks,

     
  • Loreia2
    Loreia2
    2013-03-08

    Hi usacad1,

    I can't reproduce the issue. Can you send me your userLangDefine.xml file at:
    udlv20 at_ gmail dot _ com

    BR,
    Loreia

     
    Last edit: Loreia2 2013-03-08
    • usacad1
      usacad1
      2013-03-11

      Hi Loreia. I can send you the userdefinelang.xml, but since you showed me the UDL2 working, I got a little curios, and found how to easily create the issue.

      You are right that your example works... as long as you do not have anything "incompatible" in "Folding in code 1 style" (FIC1S for short). The moment you do, numbers stop being highlighted at the first matching letter for each word defined in FIC1S.

      So, in the example you showed me, define F in FIC1S, and the second F turns off, while the two trailing zeroes still remains highlighted. It's even clearer if you define the number as 16#F0F000F00000F00000F0000. Try to see for yourself: the first F in FIC1S turns off all the F starting from the second; if you define F0, all the F0 turns off; if you define F1 (or F followed by anything except 0), anything after 16#F0 turns off.

      I've created a new test language for this test and the only thing I have in userDefineLang.xml is Prefix 2 16#2, Extras 1 F.

       
      Last edit: usacad1 2013-03-11
      Attachments
  • Loreia2
    Loreia2
    2013-03-11

    Hi usacad1 ,

    thanks for detailed explanation.
    This problem is very subtle. You see Folding in code 1 style always matches searched string, regardless of surrounding characters. It was primarily created for stuff similar to C curly brace folding points:

    int function{
    return 0;
    }
    

    How does that affect numbers?
    Well, numbers end when first whitespace is found, or first forward keyword type, and Folding in code 1 IS a forward keyword type.
    So, 16#F will trigger number recognition, but number algorithm will first check for number boundaries before checking for number content, thus "F" will be treated as Folding in code 1 rather than as a number.

    Think of your example rewritten in C-like syntax, and it will be more obvious what I am talking about.:

    16#F0{000{00000}00000}0000
    

    So, you can't have ambiguous characters/strings in both numbers and Folding in code 1 types. If you still need to use "F" as a folding in code type, try to use Folding in code 2 .

    BR,
    Loreia

     
    • usacad1
      usacad1
      2013-03-12

      Hi Loreia,

      I've used Style 2 and the problem disappears.

      I wanted to point out that F was an example. I can use "FOR" instead of F and it would still result in all digits after 16#F0 not to be regarded as number. It seems UDL2 does matching based on letters, but when matching fails it somehow forgets to say "oh, it was a number, after all".

      Thanks

       
  • Loreia2
    Loreia2
    2013-03-14

    Hi usacad1,

    that was a bug. It should be fixed in latest beta 2.1.0.14.
    You can download it from here:

    https://docs.google.com/file/d/0B0lMdiEG3L5CcGdYbG9oaDhCSnM/edit

    (go to File / Download)

    This version also fixes several issue regarding malfunctioning Folding.

    BR,
    Loreia

     
  • Nic
    Nic
    2013-03-15

    Loreia, great job and thanks so much. All my folding comments issues have been resolved. I'll let you know if anything pops up, but that was very quick!

     
  • Loreia2
    Loreia2
    2013-03-15

    Hi Nic,

    actually problem was reported 2-3 weeks ago, so I wasn't that quick :-).
    Anyway, version 2.1.0.14 has a new patch for Folding problem (much simpler than the one I implemented in 2.1.0.13 two weeks ago), so I was looking for a tester to give it a spin. You came in at perfect time.

    I am also very interested in someone testing numbers detection, bug that usacad1 reported was a pretty big one, I wonder why it wasn't reported earlier. I guess no one needed such combination of keywords.

    BR,
    Loreia

     
    • usacad1
      usacad1
      2013-03-15

      Hi Loreia,

      The number bug seems fixed. I will keep you posted if I find new stuff. I assume the change will go official in NP++6.3.1, right?

      Thank you

       
  • Loreia2
    Loreia2
    2013-03-16

    Hi usacad1,

    that bug is fixed, but I wonder if I introduced new bugs with this change. I prefer to keep this one a bit longer in beta status, before sending code to Don to include it into the main branch. Say few more weeks.

    BR,
    Loreia

     
  • piotr_cz
    piotr_cz
    2013-03-18

    Hi there
    excuse me if this issue has been discussed somewhere previously

    I've a 'convenience' problem with the default UserDefinedLnaguage module and styles/themes:
    At the moment for each language and style there should be be separate language file (ie. https://github.com/thomsmits/markdown_npp).

    By default language files are styled for default theme (black on white) and colors are redefined in language .xml file. I fell in love with 'Bespin' style for which I need to customize every custom language styles by hand.

    My idea is add possibility to link <WordsStyle> tag in language file with it's <WordsStyle> equivalent in style file by adding an attribute like 'styleName':

    <WordsStyle
        name="COMMENT LINE" 
        fgColor="1E9AE0" 
        bgColor="2A211C" 
        ... 
        styleName="COMMENT LINE"
    />
    

    with fGcolor and bGcolor being interpreted as fallback in case that style file doesn't have such name.

    This way when one could prepare just one language file that would work across all styles

     
  • Loreia2
    Loreia2
    2013-03-18

    Hi Piotr,

    support for themes was asked several times already, but it is pretty low on priority list. I will not be working on this before making UDL algorithm the way I want it to be (much more flexible and feature rich than it is now). I'd say it will take most of (or whole) 2013 before finishing this task. Only then I can start working on theme support.

    Also, do you have some suggestions how to implement styling in UDL? To "invert" colors for dark themes, or to have user create two separate schemes (for dark and light themes)?

    P.S.
    You just need one userDefineLang.xml file, use import function and it will automatically merge several language definitions into one file.

    BR,
    Loreia

     
    Last edit: Loreia2 2013-03-18
  • Hi Loreia,

    First thing: thank you very much for this incredible work :)
    I love it.

    I have one issue with comments.
    In jBASE BASIC language comments stars with * (if in beginning of the line), but it is also multiplication operator. Another feature is that comments can be anywhere if preceded by semicolon (;).
    Now, example:

    * This is comment
    *This is comment too
        * This is also comment (with preceding whitespace)
        * Multiplication below:
        VAR1 = VAR2 * VAR3 ;* comments can start after semicolon
        VAR4 = VAR5 * VAR6 ; * comments after semicolon and space
        VAR7 = VAR8 * VAR9      ;       * another comment
    

    My problem is that I cannot figure how to make comments colorized in all above cases and not in multiplication.

    I selected "Allow preceding whitespace" in "Line comment position", so first 4 lines are formatted properly as comments.
    I tried ;* as "Open" in "Comment style" with success (partial, because semicolon is also colorized as comment) in line 5, but for line 6 '; *' won’t work properly.

    Maybe I misunderstood something and it can be done in some simple way, but I cannot figure it out.

    I think of 3 ways to do that (and all needs new feature).

    1. First way is to make some wildcard for whitespaces for example ((SPC)) so it can be used like this: ;((SPC))* as "Open" and ((EOD)) as "Close" in "Comment style".
    2. Another way is to make selected character (in this example semicolon) to be treated as line breaker, so everything after this character would be treated as new line, so "Comment line style" would work.
    3. Modification of second approach would be adding "allow preceding characters and whitespaces" option in "Line comment position" which would allow inputting special characters that could precede comment (semicolon in this example).

    Second and third way is better in my opinion because semicolon is not the part of comment. However first way can be useful in other (not related to my problem) cases.

    Could you please consider adding these new features to your list? :)
    I would be awesome :)

    Again, thanks for your excellent work.

    BR

    Marek

     
    Last edit: Defiant Plumber 2013-03-29
  • Loreia2
    Loreia2
    2013-03-31

    Hi Defiant Plumber,

    First thing: thank you very much for this incredible work :)
    I love it.
    

    Thanks.

    My problem is that I cannot figure how to make comments colorized in all above cases and not in multiplication.
    

    I was able to achieve it, it works for this simple code snippet, but it may be hard to define entire language in this way.

    1) you define line comments normally, that covers first four cases
    (note that these four cases are also covered by Delimiter3 below)

    2) define operators and delimiters like this:

    Breakdown:
    Delimiter1: starts with = and extends until end of line
    Delimiter2: starts with ; and extends until end of line
    Delimiter3: starts with * and extends until end of line

    Delimiter1 allows nesting of Delimiter2
    Delimiter2 allows nesting of Delimiter3

    In this way you allow Delimiter3 only outside Delimiter1 and inside Delimiter2.
    But this is relatively complex, and it won't work with Official Notepad++ release (I just compiled a brand new beta to achieve this). New beta version will be available in few days if you want to play with it, but I recommend a simpler solution:

    1) Define line comments as starting with double asterisk (**), and set "Allow anywhere"
    2) Define multiplication as one asterisk (*)

    Adjust you code like this:

    ** This is comment
    **This is comment too
        ** This is also comment (with preceding whitespace)
        ** Multiplication below:
        VAR1 = VAR2 * VAR3 ;** comments can start after semicolon
        VAR4 = VAR5 * VAR6 ; ** comments after semicolon and space
        VAR7 = VAR8 * VAR9      ;       ** another comment
    

    And it should work right away.
    This is still within you syntax rules (good), but it requires changing current code base (bad).

    That is what I can do for you right now. New major update to UDL should bring better support for this kind of problem (strings with multiple meaning, depending on position and context)

    BR,
    Loreia

     
  • Foolish Mortal
    Foolish Mortal
    2013-07-11

    I'm very interested in having having a wildcard for whitespace, like ((SPC)) suggested above.

    The problem I want to solve is this:
    delimiter

    I want it ';['..';]' to collapse like the top-right snapshot, but with ';' instead of ';,' for comments.

    I really appreciate what you've created here! Thanks!

     
  • Loreia2
    Loreia2
    2013-07-13

    Hi Foolish Mortal (LOL at nickname):

    you can already achieve what you want in UDL2.
    Just define ';' as line comment, and then set "Folding in comment" to:
    open: '['
    close: ']
    '

    BR,
    Loreia

     
  • Foolish Mortal
    Foolish Mortal
    2013-07-25

    Thank you Loreia! That does exactly what I want.

     
  • ILLICO
    ILLICO
    2013-09-20

    Hi all,

    See below a logging text example I would like to highlight:

    ...
    2013-09-20 09:41:40,665 DEBUG [DBLogDAOImpl] Checking if script 'script-0.6.2.sql' has been run
    2013-09-20 09:41:40,665 DEBUG [DBLogDAOImpl] Checking if script 'script-1.0.sql' has been run
    2013-09-20 09:41:40,665 DEBUG [DBLogDAOImpl] Checking if script 'script-1.1.sql' has been run
    2013-09-20 09:41:40,665 DEBUG [DBLogDAOImpl] Checking if script 'script-1.2.sql' has been run
    2013-09-20 09:41:40,665 DEBUG [DBLogDAOImpl] Checking if script 'script-1.2.1.sql' has been run
    2013-09-20 09:41:40,681 DEBUG [DBLogDAOImpl] Checking if script 'script-1.3.sql' has been run
    ...
    2013-09-19 19:09:31,543 INFO [EventDispatcher] Leaving EventDispatcher
    2013-09-19 19:09:31,643 WARN [MultiCastUtils] Could not find NIC with name 'eth6-0'
    2013-09-19 19:09:31,643 WARN [LocalAddressResolverStrategy] Haven't found IP address for NIC eth6-0, will try again 9 times
    2013-09-19 19:09:31,687 WARN [MultiCastUtils] Could not find NIC with name 'eth6-0'
    2013-09-19 19:09:31,687 WARN [LocalAddressResolverStrategy] Haven't found IP address for NIC eth6-0, will try again 8 times

    In fact I use Delimiter Style with:
    Open= '
    Close= '

    so 'script-0.6.2.sql', 'eth6-0' has been matched : OK

    but I have problem with - Haven't - text that I don't want to matched.

    Is it possible to have something like this, so space is taking into account ?
    Open= ((SPC))'
    Close= '((SPC))

     
  • Loreia2
    Loreia2
    2013-09-20

    Hi ILLICO,

    Is it possible to have something like this, so space is taking into account ?
    Open= ((SPC))'
    Close= '((SPC))

    I am experimenting with something similar for UDL3. If it works out fine, you will be able to distinguish between 'string' and haven't in your log.
    For the time being, either do a replace in your log ("haven't" for "havent"), or define delimiter open sequence as:
    OPEN: (('script 'eth))
    CLOSE: '

    BR,
    Loreia

     
    • ILLICO
      ILLICO
      2013-09-20

      Thanks,

      I will wait for UDL3.

       
  • Nikolai Neff
    Nikolai Neff
    2013-10-08

    Hi!
    First of all many thanks for the great UDL support in Notepad++!

    I am however having some problems to get the folding to work properly. (See attachment)
    Sometimes the folding Markers Appear, sometimes they don't, and sometimes they are at seemingly random positions. Even if they are at their intended location, they sometimes make the document jump around, but at least they fold the indicated parts.

    I suppose I'm setting thins up in a wrong way, but I'm pretty much stuck here now.

    Also, but mostly unrelated: is there a way to use the already existing NP++ languages as a base for UDL? This could be really useful if you just wand to add a few keywords or separate them into groups and so on without changing the original language definition.

    Let me know if you need any more information and again thanks!

     
    Attachments
  • Loreia2
    Loreia2
    2013-10-09

    Hi ILLICO,

    I know it is late, but I just re-read you post and I realized you can solve your problem by defining haven't as Operator1 type. In this way apostrophe in the middle of the word can never trigger Delimiter start.

    BR,
    Loreia

     
    • ILLICO
      ILLICO
      2013-10-17

      Thanks, that solve the problem with n't, but I also have lost of french sentences with c'est, L', etc. So this is not 100% solution.

       
      • Loreia2
        Loreia2
        2013-10-17

        Hi ILLICO,

        this just a quick patch, real solution will be available in UDL3. For now, just build a list of words that you use and that contain apostrophe sign. Its not prefect, but that's the best UDL2 can do.

        BR,
        Loreia

         
  • Loreia2
    Loreia2
    2013-10-09

    Hi Nikolai,

    this is a bug that I resolved few weeks ago, but never found time to send patch to Don. However you can use beta version that has a patch build in. Download it from here:

    http://goo.gl/Bo3emS

    BR,
    Loreia

     
    • Nikolai Neff
      Nikolai Neff
      2013-10-09

      Thank you for your quick reply, I'll give it a go.

       
  • Mordachai
    Mordachai
    2013-10-23

    Improvements:

    expression separators (e.g. ;)
    multiple separate folding lists
    ((SOL)) start of line
    ((SPC)) whitespace
    suffix keyword (in addition to prefix keyword)
    somehow, resolve ' being both an apostrophe, and a possible delimiter...
    The ability to put more than one possible ending in close, such as ((EOL)) ' might help?
    But this last one - confusion / inability to distinguish a symbol that is both used as a delimiter pair () [] '' but can also occur in other contexts is IMO the biggest limitation.

    Overall, great stuff. :)

     
    Last edit: Mordachai 2013-10-23
  • Mordachai
    Mordachai
    2013-10-23

    Bug: why would 1.0 be formatted with the 1 colorized as a number, but the .0 be uncolorized (default color)?

    .5 works, 300 works, but nnn.mmm fails (I've set zero prefixes or extras or suffixes etc., in number style)

    Changing decimal separator has no apparent effect (N++ 6.5)

     
    Last edit: Mordachai 2013-10-23
  • Cyrillev
    Cyrillev
    2013-11-16

    hi,

    Thank you for this UserDefinedLanguage module.

    I use a language with comments are defined:
    Start with: C flag (only on 1st columm)
    End with: $ (not necessary on the same line)

    4 examples:
    C commentary example $

    C multiline
    commentary example $

    C080000 GO TO, STEP 100000 $

    C100000 CALCULATE,
    'pi' = 3.14 $

    Please help me for setup UserDefinedLanguage module for this comment.

    (Sorry for my English)
    Cyrillev

     
  • Loreia2
    Loreia2
    2013-11-18

    Hi Cyrillev,

    UDL 2.0 can't help here. Sorry about that. Only LINE COMMENTS (not multi-line comments) support positional limitation.

    New UDL 3.0 lifts this restriction, and allows all types to define position.
    Subscribe to this thread to get notification when UDL3.0 matures enough for beta testing phase.

    BR,
    Loreia

     
  • jxtor
    jxtor
    2013-12-06

    Hi Loreia, I have the following issue with numbers and UDL. In my language, $ can be used for two purposes: to reference a global variable, in the form $foo, and also as a number shortcut meaning the size of the currently-referenced array, in these forms: array[$], array[2..$]. For clarification, .. is used to indicate a range.

    In order to fulfill the first purpose, I have set $ as a prefix-style keyword. I have also set .. as a range character. However, there is no way I have found to allow me to tell UDL to treat $ as a number. I can use ..$ as a suffix2 in order to make [2..$] work, but only if I remove .. as my range character, which is no good. I could also set $ as a non-prefix keyword to achieve highlighting for array[$], but then array[2..$] will no longer be recognized as a range.

    Is there any way for me to get this working in UDL?

     
  • jxtor
    jxtor
    2013-12-06

    Another thing, although much more minor: . is an operator of sorts (actually references a property of objects) in my language when used on variables, and numbered objects starting with #, like #123456.name. However, it has the usual meaning of a decimal place when used in a constant number, like 50.5. It'd be nice if there were some way to tell UDL not to treat it as an operator when used in the middle of a number with no # prefix.

     
    Last edit: jxtor 2013-12-07
  • Loreia2
    Loreia2
    2013-12-10

    Hi jxtor,

    UDL does not support extending range number characters. Only digits 0123456789 represent numbers. If you need to go beyond that, you need to define prefix that is followed by a number character (one of 0123456789). Prefix on its own does not represent a number in UDL.

    I guess in your case I should add Prefix3 option where Prefix3 type would represent number on its own. This would be an interesting option for UDL3.X phase.

    It'd be nice if there were some way to tell UDL not to treat it as an operator when used in the middle of a number with no # prefix.

    This is indeed a bug. Not because I made some mistake in the code, but simply because I never thought of such a combination :-)
    I will fix it in UDL3.0.

    BR,
    Loreia

     
  • jxtor
    jxtor
    2013-12-13

    Thank you for your reply, Loreia. I will look forward to UDL 3!

    One other thing I have discovered that would be very useful would be the following. I have used the keywords feature to highlight the built-in functions of my languages. However, these keywords are then always highlighted, whether or not they are actually being used as a function.

    For example, I was just looking at a piece of code that contained the statement:

    class = x:class();

    In this case, "class" by itself is merely a variable, whereas x:class() is calling the built-in class function on object x. My UDL setup, however, will highlight both instances of 'class' the same way. I would suggest that there be a method to select whether a group of keywords should only be highlighted if preceded or succeeded by certain operators or, especially, by delimiters.

    In this way, all languages that use functions like foo(args) would be able to highlight 'foo' only when it is a function, as denoted by the () afterwards.

    Please forgive me if such a feature already exists, but I have not been able to find it.

    Cheers!

     
    Last edit: jxtor 2013-12-13
  • amb
    amb
    2013-12-21

    Code folding works fine if file has Windows EOL format, but is misaligned when file has Unix EOL format. I am using v6.5.2. Is there a patch available to fix this problem. Thanks.

     
  • xsxs
    xsxs
    2013-12-30

    Hi, may be this thread would have been better than the help section for my question in help.

    So here I formulate it as suggestion.

    Unfortunately only blank ' ' and ',' are stopping prefix mode from the keyword-tab to continue eating up the next characters so that for example the bracket-highlighting can't recognize their corresponding opening or closing bracket.

    a) Wouldn't it make sense if the brackets () and {} and [] as well stop the prefix mode and/or
    b) the user has the option to define in the style-section of the keywords characters that stops it?

    I am working with a userdefined-Language.

    Second suggestion would it be possible to add automatically all the keywords to the spell-check?

    Thanks in advance xsxs

     
  • Loreia2
    Loreia2
    2013-12-30

    Hi xsxs,

    prefix mode ends when any forward-matching type starts (Operator1, Folder in code 1, Delimiters, Comments). In your case, just define () and {} and [] as Operator1 type and you will get desired effect.

    BR,
    Loreia

     
  • mzvarik
    mzvarik
    2014-01-28

    There's one major problem with this plugin:
    It doesn't allow to add a parsing to existing one, like HTML.

    Someone made a Smarty template (*.tpl) available, but it's useless since you lose all the HTML code styling.


    I tryed to edit the Notepad++ XML files, just to add simple {{ syntax }} to be recognized as comment, but files stylers.xml, langs.xml... don't react :-(

     
    Last edit: mzvarik 2014-01-28
<< < 1 .. 10 11 12 13 14 > >> (Page 12 of 14)