75 Commits

Author SHA1 Message Date
Allan Odgaard
ff4a796c20 Don’t pass inserted data to the buffer_t metadata hooks
None of the hooks actually use this data and as they are called after the replacement has been done, they can query the buffer, should they require information about its content.

The problem with having to pass the data pointer to the hooks is that there could be future situations in where the buffer’s data is not inserted as one contiguous block of memory, for example we could allow constructing a buffer from a storage_t instance.
2016-06-22 18:31:49 +02:00
Allan Odgaard
61a3a6229a Use constructor delegation for buffer_t 2016-06-22 18:31:49 +02:00
Allan Odgaard
371d426c5f Add ‘char const*’ insertion API to ng::buffer_t 2016-06-21 23:23:44 +02:00
Allan Odgaard
e8df02f4a4 Let buffer_t delegate operator== to its storage member 2016-06-21 06:19:04 +02:00
Allan Odgaard
da96be12c9 Add comparison operators to storage_t class 2016-06-21 06:18:55 +02:00
Allan Odgaard
aa310c87c5 Add const access to buffer_t’s underlying storage
This is to be used for cheap snapshots.
2016-06-20 18:19:14 +02:00
Allan Odgaard
a2dfe22339 Only expose pointer to const bytes owned by memory_t::helper_t
This guards against misuse of the API, as the compiler should now enforce our append-only design.
2016-06-20 18:19:13 +02:00
Allan Odgaard
608b375b30 Let the constructor of memory_t::helper_t accept an iterator pair
This should make the API more clear, as there is no longer the requirement to copy bytes after constructing memory_t with a non-zero size.
2016-06-20 18:19:13 +02:00
Allan Odgaard
b6861444c8 Replace memory_t::grow with memory_t::append
This makes it clear that we can only append to a memory_t type.
2016-06-20 18:19:13 +02:00
Allan Odgaard
3c3b48f9ad Rename memory_t::free → memory_t::available 2016-06-20 18:19:13 +02:00
Allan Odgaard
a340811771 Allow access to buffer_t’s raw storage via the visitor interface
Previously this was done by exposing iterators but for this to go into the abstract base class we sort of need abstract iterators and that is too complex and visitor interface is sufficient for our single use case.
2016-06-13 13:02:49 +02:00
Allan Odgaard
b5747ec6a6 Return text::indent_t by value so we can create it on the fly 2016-06-13 13:02:49 +02:00
Allan Odgaard
029dab73be Make to_xml a member function of buffer_t
We could implement this by using the public scopes member function though this function includes dynamic scopes such as misspelled ranges which would change the current semantics of the to_xml helper function.

It might actually make sense to make this change, but I’m avoiding functional changes while refactoring.
2016-06-13 13:01:10 +02:00
Allan Odgaard
84ef816ec3 Introduce a buffer_api_t abstract base class
This allows us to use the various helper functions (mainly found in the selection library) with alternative buffer implementations.
2016-06-13 13:01:10 +02:00
Allan Odgaard
32be8a4541 Cap line/column given to buffer_t::convert 2016-06-13 12:59:31 +02:00
Allan Odgaard
20fb69494b Make two buffer_t member functions private
One of them is used by the undo manager so we declare undo_manager_t a friend of buffer_t.
2016-06-13 12:59:31 +02:00
Allan Odgaard
414c336ba9 Remove descendants when mark to remove has a trailing slash 2016-06-02 21:07:43 +02:00
Allan Odgaard
4ee49c95f6 Remove forward declaration of non-existing data type 2016-06-02 21:07:43 +02:00
Allan Odgaard
e83fee564c Refactor: use emplace_back(…) instead of push_back(make_pair(…)) 2016-05-28 22:12:46 +02:00
Allan Odgaard
417193e089 Update link dependencies for all targets
Some targets were including headers from frameworks not specified in their link dependencies. For a clean build this could cause an issue because the header was not available at the time of building the target.

The updated link dependencies are also based on what a target’s tests require. Ideally tests would have separate link dependencies, but as we don’t want to maintain this manually, this will have to wait until the build system automatically handles link dependencies.

Currently the commit command uses constants from the CommitWindow framework but should actually not be linked with it. However, the optimizer will strip dead code, so it should not result in much if any difference in the resulting binary and does solve a build dependency issue.
2016-05-07 13:00:55 +02:00
Allan Odgaard
e80f1ff49f Leaving out mark type will search for next/previous of any type
This commit is based on work by Ronald Wampler.
2016-02-25 13:11:12 +07:00
Adam Strzelecki
e59db8375f Use panel language unless spellingLanguage is specified
This partially reverts changes of 3fdc72b93a:
Support spell checking being “automatic by language”.

Before 3fdc72b spellingLanguage .tm_properties setting (default "en") was the
only way to set spelling language for file (buffer). English was default
language for all files. 3fdc72b introduced change that when “automatic by
language” was selected in system's spelling panel then TextMate was ignoring
spellingLanguage setting and was using automatic by language.

However because “automatic by language” is default on OS X, effectively 3fdc72b
makes spellingLanguage setting no longer effective. To make it work one needs
to set explicit spelling language either in System Preferences or in spelling
panel upon each TextMate run (since this is getting reset after application
restart) - which is counter-intuitive, can be treated as regression and it is
vaguely described in ChangeLog:

 * Support spell checking being “automatic by language”. This is set via the
   spelling panel.

This change presents alternative approach, introducing new empty
spellingLanguage setting "" (which is now default), which makes use system
panel language setting, including “automatic by language”.

From now on all files will be checked against system panel selected language
(or automatic), unless .tm_properties project specifies explicitly language for
given file using, eg.:

    [ locale-en_US.ini ]
    spellingLanguage = en_US

    [ locale-pl_PL.ini ]
    spellingLanguage = pl_PL

Or automatically depending on file name:

    [ locale-*.ini ]
    spellingLanguage = '${TM_FILEPATH/^.*locale-([a-z]+_[A-Z]+).*$/$1/}'
2016-01-29 08:46:18 +07:00
Allan Odgaard
3fdc72b93a Support spell checking being “automatic by language”
This must be set in the spelling panel and changing language via the spelling panel does not update the buffer (recheck the text with the new spelling language), so toggle automatic spelling after using the spelling panel to change language.

Closes #1139
2015-06-24 00:46:49 +02:00
Allan Odgaard
40879d5683 Replace sizeofA macro with range-based for loop or std::begin/end 2015-03-05 16:38:09 +07:00
Allan Odgaard
123471a6e8 Use arc4random_uniform (in tests) to avoid modulus bias 2014-12-16 16:02:09 +07:00
Allan Odgaard
2cb480364f Asking for marks of any type now return both type and value
Previously we would only return the type.
2014-10-19 20:26:00 +02:00
Allan Odgaard
862a543074 Don’t rebase mark positions when returning marks for a subset 2014-10-19 20:25:59 +02:00
Allan Odgaard
a22801f615 Remove undesired space character 2014-10-19 20:25:59 +02:00
Allan Odgaard
0d917f8f94 Allow a string value to be stored with each mark (buffer)
We were already storing a string for each mark but was (redundantly) using the mark type as value.
2014-10-19 20:25:59 +02:00
Allan Odgaard
356999392d Remove crash report info gathering from buffer type
This was affecting performance when performing actions that go through the entire buffer. Also, none of the functions are involved in any crash reports.
2014-09-15 20:41:51 +02:00
Allan Odgaard
98b08464c7 Workaround for NSSpellChecker advancing the event loop
This fixes #1260 though we may want to update our design to work with an asynchronous spell checker.
2014-09-02 11:19:34 +02:00
Allan Odgaard
e78764a89e Let threaded syntax highlight parsing for ng::buffer_t be opt-in 2014-06-28 17:42:23 +02:00
Allan Odgaard
2b74e76a2f Disable concurrent buffer parsing when not on main thread
The problem is that we can only return to the proper thread/queue when we know what that thread/queue is. Additionally, when running tests, we are calling from a concurrent queue, so even knowing the queue, we cannot safely update the buffer with the new scopes, as only a serial queue can give us exclusive access.
2014-05-16 22:11:29 +07:00
Allan Odgaard
d7dba7cd7a Drop the oak::server_t abstraction for buffer parser 2014-05-16 22:11:29 +07:00
Allan Odgaard
af3f4aaa33 Check result of most CF/CT ‘Create’ functions 2014-05-15 13:17:30 +07:00
Allan Odgaard
39b94e6ac3 Harmonize whitespace and add trailing newline 2014-04-14 14:26:52 +07:00
Allan Odgaard
96de950ed1 Return initializer list instead of using std::make_pair (C++11) 2014-04-06 19:36:09 +07:00
Allan Odgaard
3646f0630d Add test for thai script
This isn’t causing an issue, though at a higher level we wish to split the combined characters when using backward delete.
2014-03-13 17:25:29 +07:00
Allan Odgaard
c2397484b8 Use C++11 for loop
Majority of the edits done using the following ruby script:

    def update_loops(src)
      dst, cnt = '', 0

      block_indent, variable = nil, nil
      src.each_line do |line|
        if block_indent
          if line =~ /^#{block_indent}([{}\t])|^\t*$/
            block_indent = nil if $1 == '}'
            line = line.gsub(%r{ ([^a-z>]) \(\*#{variable}\) | \*#{variable}\b | \b#{variable}(->) }x) do
              $1.to_s + variable + ($2 == "->" ? "." : "")
            end
          else
            block_indent = nil
          end
        elsif line =~ /^(\t*)c?iterate\((\w+), (?!diacritics::make_range)(.*\))$/
          block_indent, variable = $1, $2
          line = "#$1for(auto const& #$2 : #$3\n"
          cnt += 1
        end
        dst << line
      end
      return dst, cnt
    end

    paths.each do |path|
      src = IO.read(path)

      cnt = 1
      while cnt != 0
        src, cnt = update_loops(src)
        STDERR << "#{path}: #{cnt}\n"
      end

      File.open(path, "w") { |io| io << src }
    end
2014-03-03 10:34:13 +07:00
Allan Odgaard
9fe5a058ce Make buffer_t::wait_for_repair a no-op with no grammar 2013-09-15 21:22:44 +02:00
Allan Odgaard
1c308c810d Use map::emplace instead of inserting std::pair (C++11) 2013-09-05 20:59:11 +02:00
Allan Odgaard
5c4573873f Protect grammar_t with mutex
Presently buffer_t::wait_for_repair will use the grammar from the main thread (rather than wait for the parse thread to finish) which does cause a race condition since the parser will now mutate the grammar (graph coloring).

Ideally buffer_t::wait_for_repeat would simply wait for the parser to finish, but I’d prefer to first switch the parser to use GCD.
2013-09-05 17:26:47 +02:00
Allan Odgaard
69be0205ba Fix update of misspelled ranges
If nothing was misspelled in the updated range, and a value existed for the end of the range (indicating that what followed the updated range was misspelled) then that value would be erased.
2013-09-05 12:41:30 +02:00
Adam Strzelecki
b0b182e2e1 Invalidate spelling when ignoring or learning a word
We invalidate the entire buffer since the word can appear in multiple locations. This could be optimized to only invalidate misspelled instances of the ignored or learned word. Likewise, we redraw entire buffer since the refresh macro is not able to handle changes in spelling meta data and calculate minimal refresh region.
2013-09-03 15:06:40 +02:00
Adam Strzelecki
6c6316573f Implement Check Spelling
Now using Edit -> Spelling -> Check Spelling selects next spelling error or one
at caret if it was not yet selected, then shows context menu with correction
suggestions.

This makes checking spelling as easy as tapping Cmd+;

Closes #1103
2013-09-03 15:06:07 +02:00
Allan Odgaard
e4e80a946c Use std::make_shared 2013-09-03 12:27:20 +02:00
Allan Odgaard
282e018ec8 Use format string parser for symbol transformations
This avoids an extra layer of escapes.
2013-08-28 15:27:42 +02:00
Allan Odgaard
7247695f9b Update buffer_t::scopes to new scope_t API 2013-08-28 00:23:08 +02:00
Allan Odgaard
d93b20d571 Use new scope_t API 2013-08-28 00:23:08 +02:00
Allan Odgaard
057096af5b Rename API to make searching easier
Using generic names like ‘append’ is not good when analyzing code for potential refactoring.
2013-08-27 15:30:09 +02:00