diff options
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.74.0/documentation/align-thresholds.txt')
-rw-r--r-- | debian/uncrustify-trinity/uncrustify-trinity-0.74.0/documentation/align-thresholds.txt | 239 |
1 files changed, 0 insertions, 239 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.74.0/documentation/align-thresholds.txt b/debian/uncrustify-trinity/uncrustify-trinity-0.74.0/documentation/align-thresholds.txt deleted file mode 100644 index 4c41f7db..00000000 --- a/debian/uncrustify-trinity/uncrustify-trinity-0.74.0/documentation/align-thresholds.txt +++ /dev/null @@ -1,239 +0,0 @@ -------------------------------------------------------------------------------- -Alignment thresholds: - -Alignment threshold are used to prevent aligning of certain text. - -Consider this example when aligning assignments: - - a = 2; - gld.settings[somevariable] = 5; - -Without thresholds, this would result in: - - a = 2; - gld.settings[somevariable] = 5; - -However, this is likely not desired. - -So to handle this, we set a limit on the number of columns that a alignment -may move a token. If we set the threshold to, say, 3 characters, then -the two would not be aligned together because 'a = 2' would have to be moved -by 25 columns. - -Here's a more complicated case: - - a = 1; - bb = 2; - ccc = 3; - dddd = 4; - eeeee = 5; - ffffff = 6; - -In this case, we may want this output: - - a = 1; - bb = 2; - ccc = 3; - dddd = 4; - eeeee = 5; - ffffff = 6; - -But, with a threshold of 3, 'a' and 'ffffff' cannot be aligned together. - -So how should these thresholds be implemented? - -One approach is to use the threshold as the maximum difference between the -current maximum and the new maximum. Using this approach, all 6 lines above -are aligned, because the change for each is 1 column. - -Consider this with a line-span of 3 and a column-threshold of 3. -Note that we'll now need to keep track of the last line processed. -(line and column numbers added for clarity) - - 111111 - 123456789012345 - --------------- -1 | a = 1; -2 | eeeee = 5; -3 | ffffff = 6; - -On line 1, the maxcol is set to 3. -On line 2, the maxcol would be set to 7, except that exceeds the threshold. -On line 3, the maxcol would be set to 8, except that exceeds the threshold. - -So, it ends up with one item in the align stack - line 1. -Then we pick up from where we left off - on line 2. -On line 2, the maxcol is set to 7. -On line 3, the maxcol is set to 8. - -End result: - 111111 - 123456789012345 - --------------- -1 | a = 1; -2 | eeeee = 5; -3 | ffffff = 6; - - -Now lets get tricky. - - 111111 - 123456789012345 - --------------- -1 | a = 1; -2 | eeeee = 5; -3 | ccc = 3; -4 | ffffff = 6; - -How should this be aligned? -I think we need to add another list - a 'skipped' list, that runs in parallel -with the 'aligned' list. - -On line 1, the maxcol is set to 3, added to the aligned list. -On line 2, col exceeds the threshold, so it is added to the skipped list. -On line 3, the maxcol is set to 5, added to the aligned list. -Now, after an item is added to the aligned list, the skipped list must be re-scanned. -We now see that line 2 is only 2 columns different, so it is added and maxcol = 7. -The skipped list is now empty. -On line 4, the maxcol is set to 8, added to the aligned list. - -So the output is: - - 111111 - 123456789012345 - --------------- -1 | a = 1; -2 | eeeee = 5; -3 | ccc = 3; -4 | ffffff = 6; - - -Now for a case where the skipped list is not absorbed: - - 111111 - 123456789012345 - --------------- -1 | a = 1; -2 | iiiiiiiiiiiiieeeee = 5; -3 | ccc = 3; -4 | ffffff = 6; - -On line 1, the maxcol is set to 3, added to the aligned list. -On line 2, col exceeds the threshold, so it is added to the skipped list. -On line 3, the maxcol is set to 5, added to the aligned list. -Skipped list is scanned, nothing moved from the skipped list to the aligned list. -On line 4, the maxcol is set to 8, added to the aligned list. - -So the output is: - - 111111 - 123456789012345 - --------------- -1 | a = 1; -2 | iiiiiiiiiiiiieeeee = 5; -3 | ccc = 3; -4 | ffffff = 6; - -As a reminder, the old system would have produced: - -1 | a = 1; -2 | iiiiiiiiiiiiieeeee = 5; -3 | ccc = 3; -4 | ffffff = 6; - -Which is probably not wanted. - - ---===---===---===---===-- -Absolute thresholds -To get a better grip on what thresholds do the absolute thresholds were introduced. -An absolute threshold means that the item, in this case the assign statement, is never -moved more than the threshold value. - -See the below example: -Relative threshold = 10 - 000000000111111111122222222223 - 123456789012345678901234567890 -1| a = 1 -2| aaaaa = 1 -3| bbbbbbbbbbb = 2 -4| ccccccccccccccccccccc = 3 - -Absolute threshold: - 000000000111111111122222222223 - 123456789012345678901234567890 -1| a = 1 -2| aaaaa = 1 -3| bbbbbbbbbbb = 2 -4| cccccccccccccccccccc = 3 - ---===---===---===---===-- -How to do this generically in the code... - -Easy case - one item per line. - -Here's the functions and what each do: -align_start(line_span, col_thresh) -align_add(pc) -align_flush() -align_newline(count) -align_end() - -For each entry, a sequence number is kept. - -align_start(line_span, col_thresh) - - initializes the align and skipped lists - - zero max_column - - zero cur_seqnum - - zero nl_count - -align_add(pc) - - update cur_seqnum, assign to item - - if item column is within threshold - - zero nl_count - - add to the aligned list - - if item column is > max_col - - update max_col - - re-adds all items on the skipped list - - if item column is not within threshold, add to skipped list - -align_newline(count) - - adds count to nl_count - - if nl_count > line_span, call align_flush() - -align_flush() - - step through all the items in aligned list and align the items to max_column - - keep the seq_num of the last aligned item - - zero max_column - - remove all items with a seq_num < last aligned seq_num - - call align_add on all remaining items in the skipped list - -align_end() - - call align_flush - - clear the lists - - free resources, etc - -Example usage: Aligning trailing comments - -void align_trailing_comments(void) -{ - chunk_t *pc; - - align_start(cpd.settings[UO_align_right_cmt_span], - cpd.settings[UO_align_right_cmt_thresh]); - - for(pc = chunk_get_head(); pc != NULL; pc = chunk_get_next(pc)) - { - if ((pc->flags & PCF_RIGHT_COMMENT) != 0) - { - align_add(pc); - } - else if (chunk_is_newline(pc)) - { - align_newline(pc->nl_count); - } - } - - align_end(); -} - |