calibre - en to sv translation catalogue (64 entries)

en: Function mode for Search & replace in the Editor
sv: Funktionsläge för Sök & ersätt i Redigeraren

en: The :guilabel:`Search & replace` tool in the editor support a *function mode*. In this mode, you can combine regular expressions (see :doc:`regexp`) with arbitrarily powerful Python functions to do all sorts of advanced text processing.
sv: Verktyget :guilabel:`Sök & ersätt` i redigeraren stöder ett *funktionsläge*. I det här läget kan du kombinera reguljära uttryck (se :doc:`regexp`) med godtyckligt kraftfulla Python-funktioner för att göra alla typer av avancerad textbehandling.

en: In the standard *regexp* mode for search and replace, you specify both a regular expression to search for as well as a template that is used to replace all found matches. In function mode, instead of using a fixed template, you specify an arbitrary function, in the `Python programming language <https://docs.python.org>`_. This allows you to do lots of things that are not possible with simple templates.
sv: I standardläget *regexp* för sök och ersätt anger du både ett reguljärt uttryck för att söka efter och en mall som används för att ersätta alla hittade matchningar. I funktionsläget, istället för att använda en fast mall, anger du en godtycklig funktion, i  `programmeringsspråket Python  <https://docs.python.org>`_. Det här gör att du kan göra massor av saker som inte är möjliga med enkla mallar.

en: Techniques for using function mode and the syntax will be described by means of examples, showing you how to create functions to perform progressively more complex tasks.
sv: Tekniker för att använda funktionsläge och syntaxen beskrivs med hjälp av exempel, som visar dig hur du skapar funktioner för att utföra allt mer komplexa uppgifter.

en: The Function mode
sv: Funktionsläget

en: Automatically fixing the case of headings in the document
sv: Automatiskt justera skiftläget med rubrikerna i dokumentet

en: Here, we will leverage one of the builtin functions in the editor to automatically change the case of all text inside heading tags to title case::
sv: Här kommer vi att utnyttja en av de inbyggda funktioner i redigeraren för att automatiskt ändra skiftläget för all text i rubriktaggar till versal::

en: For the function, simply choose the :guilabel:`Title-case text (ignore tags)` builtin function. The will change titles that look like: ``<h1>some titLE</h1>`` to ``<h1>Some Title</h1>``. It will work even if there are other HTML tags inside the heading tags.
sv: För funktionen, välj helt enkelt den inbyggda funktionen :guilabel:`Titelskiftlägestext (ignorera taggar)`. Den kommer att ändra titlar som ser ut som: ``<h1>någon titEL</h1>`` till ``Någon Titel``. Det kommer att fungera även om det finns andra HTML-taggar inuti rubriktaggarna.

en: Your first custom function - smartening hyphens
sv: Din första anpassade funktion - smartare bindestreck

en: The real power of function mode comes from being able to create your own functions to process text in arbitrary ways. The Smarten Punctuation tool in the editor leaves individual hyphens alone, so you can use the this function to replace them with em-dashes.
sv: Den verkliga kraften i funktionsläge kommer från att kunna skapa dina egna funktioner för att bearbeta text på godtyckliga sätt. Förbättra skiljeteckenhanteringsverktyget i redigeraren lämnar enskilda bindestreck i fred, så att du kan använda denna funktion för att ersätta dem med em-streck.

en: To create a new function, simply click the :guilabel:`Create/edit` button to create a new function and copy the Python code from below.
sv: För att skapa en ny funktion, klickar du helt enkelt på knappen :guilabel:`Skapa/redigera` för att skapa en ny funktion och kopiera Python-koden från nedan.

en: Every :guilabel:`Search & replace` custom function must have a unique name and consist of a Python function named replace, that accepts all the arguments shown above. For the moment, we won't worry about all the different arguments to ``replace()`` function. Just focus on the ``match`` argument. It represents a match when running a search and replace. Its full documentation in available `here <https://docs.python.org/library/re.html#match-objects>`_. ``match.group()`` simply returns all the matched text and all we do is replace hyphens in that text with em-dashes, first replacing double hyphens and then single hyphens.
sv: Varje :guilabel:`Sök och ersätt` anpassad funktion måste ha ett unikt namn och bestå av en Python-funktion med namnet ``replace``, som accepterar alla argument som visas ovan. För tillfället kommer vi inte oroa oss för alla olika argument för funktionen ``replace()``. Fokusera bara på argumentet ``match``. Det representerar en matchning när du söker och ersätter. Dess fullständiga dokumentation finns tillgänglig `här <https://docs.python.org/library/re.html#match-objects>`_. ``match.group()`` returnerar helt enkelt all den matchad text och allt vi gör är att ersätta bindestreck i den texten med em-bindestreck, ersätt först dubbla bindestreck och sedan enkla bindestreck.

en: Use this function with the find regular expression::
sv: Använd den här funktionen med det reguljära uttrycket hitta::

en: And it will replace all hyphens with em-dashes, but only in actual text and not inside HTML tag definitions.
sv: Och det kommer att ersätta alla bindestreck med em-streck, men bara i själva texten och inte inne i HTML-taggdefinitioner.

en: The power of function mode - using a spelling dictionary to fix mis-hyphenated words
sv: Kraften av funktionsläge - med hjälp av en stavningsordboken att åtgärda felaktigt avstavade ord

en: Often, e-books created from scans of printed books contain mis-hyphenated words -- words that were split at the end of the line on the printed page. We will write a simple function to automatically find and fix such words.
sv: Ofta innehåller böcker skapade av skanningar av tryckta böcker felavstavade ord -- ord som delades vid slutet av raden på den utskrivna sidan. Vi kommer att skriva en enkel funktion för att automatiskt hitta och åtgärda sådana ord.

en: Use this function with the same find expression as before, namely::
sv: Använd denna funktion med samma sökuttryck som tidigare, det vill säga::

en: And it will magically fix all mis-hyphenated words in the text of the book. The main trick is to use one of the useful extra arguments to the replace function, ``dictionaries``.  This refers to the dictionaries the editor itself uses to spell check text in the book. What this function does is look for words separated by a hyphen, remove the hyphen and check if the dictionary recognizes the composite word, if it does, the original words are replaced by the hyphen free composite word.
sv: Och det kommer magiskt åtgärda alla felavstavade ord i texten i boken. Huvudtricket är att använda en av de användbara extra argument till replace-funktionen ``dictionaries``. Detta syftar på de ordböcker redigeraren själv använder för att stavningskontrollera text i boken. Vad denna funktion gör är att leta efter ord separerade med ett bindestreck, tar bort bindestrecket och kontrollerar om ordboken godkänner sammansatt ordet, om den gör det, ersättas de ursprungliga orden med de bindestrecksfria sammansatta orden.

en: Note that one limitation of this technique is it will only work for mono-lingual books, because, by default, ``dictionaries.recognized()`` uses the main language of the book.
sv: Observera att en begränsning av denna teknik är att den bara fungerar för enspråkiga böcker, eftersom ``dictionaries.recognized()`` som standard använder bokens huvudspråk.

en: Auto numbering sections
sv: Automatisk numrera avsnitt

en: Now we will see something a little different. Suppose your HTML file has many sections, each with a heading in an :code:`<h2>` tag that looks like :code:`<h2>Some text</h2>`. You can create a custom function that will automatically number these headings with consecutive section numbers, so that they look like :code:`<h2>1. Some text</h2>`.
sv: Nu kommer vi att se något lite annorlunda. Anta att din HTML-fil har många avsnitt, var och en med en rubrik i en :code:`<h2>` tagg som ser ut som :code:`<h2>Någon text</h2>`. Du kan skapa en anpassad funktion som automatiskt numrerar dessa rubriker med avsnittsnummer i följd, så att de ser ut :code:`<h2>1. Någon text</h2>`.

en: Use it with the find expression::
sv: Använd det med sökuttrycket::

en: Place the cursor at the top of the file and click :guilabel:`Replace all`.
sv: Placera markören överst i filen och klicka på :guilabel:`Ersätt alla`.

en: This function uses another of the useful extra arguments to ``replace()``: the ``number`` argument. When doing a :guilabel:`Replace All` number is automatically incremented for every successive match.
sv: Den här funktionen använder ett annat av de användbara extraargumenten för argumentet ``replace()``: ``number``. När du gör ett :guilabel:`Ersätt alla`-räknas numret upp automatiskt för varje efterföljande träff.

en: Another new feature is the use of ``replace.file_order`` -- setting that to ``'spine'`` means that if this search is run on multiple HTML files, the files are processed in the order in which they appear in the book. See :ref:`file_order_replace_all` for details.
sv: En annan ny funktion är användningen av ``replace.file_order`` -- inställningen att ``'spine'`` betyder att om denna sökning körs på flera HTML-filer bearbetas filerna i den ordning de visas i boken. Se :ref:`file_order_replace_all` för detaljer.

en: Auto create a Table of Contents
sv: Skapa automatiskt en innehållsförteckning

en: Finally, lets try something a little more ambitious. Suppose your book has headings in ``h1`` and ``h2`` tags that look like ``<h1 id="someid">Some Text</h1>``. We will auto-generate an HTML Table of Contents based on these headings. Create the custom function below:
sv: Slutligen, låt oss testa något lite mer ambitiöst. Antag att din bok har rubriker i ``h1`` och ``h2`` taggar som ser ut som  ``<h1 id="someid">Någon text</h1>``. Vi kommer automatiskt skapa en HTML-innehållsförteckning baserad på dessa rubriker. Skapa den anpassade funktionen nedan:

en: And use it with the find expression::
sv: Och använd den med sökuttrycket::

en: Run the search on :guilabel:`All text files` and at the end of the search, a window will popup with "Debug output from your function" which will have the HTML Table of Contents, ready to be pasted into :file:`toc.html`.
sv: Kör sökningen på :guilabel:`Alla textfiler` och vid slutet av sökningen, kommer ett fönster dyka upp med "Felsök utmatning från din funktion" vilken kommer ha HTML-innehållsförteckning, klar att klistras in i :file:`toc.html`.

en: The function above is heavily commented, so it should be easy to follow. The key new feature is the use of another useful extra argument to the ``replace()`` function, the ``data`` object. The ``data`` object is a Python *dictionary* that persists between all successive invocations of ``replace()`` during a single :guilabel:`Replace All` operation.
sv: Funktionen ovan är kraftigt kommenterad, så den borde vara lätt att följa. Den viktigaste nya funktionen är användningen av ett annan användbart extra argument till funktionen ``replace()``, objektet ``data``. Objektet ``data`` är en Python *ordbok* som kvarstår mellan alla efterföljande anrop av ``replace()`` under en enda :guilabel:`Ersätt alla` operation.

en: Another new feature is the use of ``call_after_last_match`` -- setting that to ``True`` on the ``replace()`` function means that the editor will call ``replace()`` one extra time after all matches have been found. For this extra call, the match object will be ``None``.
sv: En annan ny funktion är användningen av ``call_after_last_match`` -- genom att ställa in det till ``True`` på funktionen ``replace()`` innebär det att redigeraren kommer att anropa ``replace()`` en extra gång efter att alla träffar har hittats. För detta extra anrop kommer träffobjektet vara ``None``.

en: This was just a demonstration to show you the power of function mode, if you really needed to generate a Table of Contents from headings in your book, you would be better off using the dedicated Table of Contents tool in :guilabel:`Tools->Table of Contents`.
sv: Det var bara en demonstration för att visa styrkan av funktionsläge, om du verkligen behövde skapa en innehållsförteckning från rubriker i din bok, kommer du ha större nytta av att använda det dedikerade innehållsförteckningsverktyget i :guilabel:`Vertyg->Innehållsförteckning`.

en: The API for the function mode
sv: API för funktionsläget

en: All function mode functions must be Python functions named replace, with the following signature::
sv: Alla funktionsläge funktioner måste vara Python-funktioner som heter "replace" med följande signatur::

en: When a find/replace is run, for every match that is found, the ``replace()`` function will be called, it must return the replacement string for that match. If no replacements are to be done, it should return ``match.group()`` which is the original string. The various arguments to the ``replace()`` function are documented below.
sv: När en sök/ersätt körs, för varje träff som hittas kommer funktionen ``replace()`` att anropas, den måste returnera ersättningssträngen för den träffen. Om inga ersättare ska göras, bör den returnera ``match.group()`` som är den ursprungliga strängen. De olika argumenten för funktionen ``replace()`` dokumenteras nedan.

en: The ``match`` argument
sv: Argumentet ``match``

en: The ``match`` argument represents the currently found match. It is a `Python Match object <https://docs.python.org/library/re.html#match-objects>`_. Its most useful method is ``group()`` which can be used to get the matched text corresponding to individual capture groups in the search regular expression.
sv: Argumentet ``match`` representerar den aktuella hittade matchningen. Det är ett `Python objekt <https://docs.python.org/library/re.html#match-objects>`_. Den användbaraste metoden är ``group()`` som kan användas för att få den matchande texten som motsvarar enskilda fångstgrupper i reguljära sökuttrycket.

en: The ``number`` argument
sv: Argumentet ``number``

en: The ``number`` argument is the number of the current match. When you run :guilabel:`Replace All`, every successive match will cause ``replace()`` to be called with an increasing number. The first match has number 1.
sv: Argumentet ``nummer`` är numret på den aktuella träffen. När du kör :guilabel:`Ersätt alla`, kommer varje efterföljande träff att orsaka ``replace()`` att anropas med ett ökande antal. Första träff har nummer 1.

en: The ``file_name`` argument
sv: Argumentet ``file_name``

en: This is the filename of the file in which the current match was found. When searching inside marked text, the ``file_name`` is empty. The ``file_name`` is in canonical form, a path relative to the root of the book, using ``/`` as the path separator.
sv: Det här är filnamnet på filen däre den aktuella träffen hittades. När du söker inuti markerad text är ``file_name`` tom. ``file_name`` är i kanonisk form, en relativ sökväg till roten av boken, med ``/`` som sökvägsavgränsare.

en: The ``metadata`` argument
sv: Argumentet ``metadata``

en: This represents the metadata of the current book, such as title, authors, language, etc. It is an object of class :class:`calibre.ebooks.metadata.book.base.Metadata`. Useful attributes include, ``title``, ``authors`` (a list of authors) and ``language`` (the language code).
sv: Detta representerar metadata för den aktuella boken, som titel, författare, språk, etc. Det är ett objekt av klassen :class:`calibre.ebooks.metadata.book.base.Metadata`. Användbara egenskaper inkluderar, ``title``, ``authors`` (en lista med författare) och ``language`` (språkkod).

en: The ``dictionaries`` argument
sv: Argumentet ``dictionaries``

en: This represents the collection of dictionaries used for spell checking the current book. Its most useful method is ``dictionaries.recognized(word)`` which will return ``True`` if the passed in word is recognized by the dictionary for the current book's language.
sv: Detta innebär insamling av ordböcker som används för stavningskontroll den aktuella boken. Den användbaraste metoden ``dictionaries.recognized(word)`` vilken som returnerar ``True`` om givet in ord känns igen av ordbok för den aktuella bokens språk.

en: The ``data`` argument
sv: ``data``-argumentet

en: This a simple Python ``dictionary``. When you run :guilabel:`Replace all`, every successive match will cause ``replace()`` to be called with the same ``dictionary`` as data. You can thus use it to store arbitrary data between invocations of ``replace()`` during a :guilabel:`Replace all` operation.
sv: Detta är en enkel Python ``ordbok``. När du kör :guilabel:`Ersätt alla` kommer varje efterföljande träff att orsaka ``replace()`` att anropas med samma ``ordbok`` som data. Du kan alltså använda den för att lagra godtyckliga data mellan anrop av ``replace()`` under en :guilabel:`Ersätt alla`-operation.

en: The ``functions`` argument
sv: ``functions``-argumentet

en: The ``functions`` argument gives you access to all other user defined functions. This is useful for code re-use. You can define utility functions in one place and re-use them in all your other functions. For example, suppose you create a function name ``My Function`` like this:
sv: ``functions``-argumentet ger dig tillgång till alla andra användardefinierade funktioner. Detta är användbart för kodåteranvändning. Du kan definiera nyttofunktioner på ett ställe och återanvända dem i alla dina andra funktioner. Anta till exempel att du skapar ett funktionsnamn ``My Function`` så här:

en: Then, in another function, you can access the ``utility()`` function like this:
sv: Sedan, i en annan funktion kan du komma åt ``utility()`` funktionen så här:

en: You can also use the functions object to store persistent data, that can be re-used by other functions. For example, you could have one function that when run with :guilabel:`Replace All` collects some data and another function that uses it when it is run afterwards. Consider the following two functions:
sv: Du kan också använda funktionsobjektet för att lagra beständiga data, som kan återanvändas av andra funktioner. Till exempel kan du ha en funktion som när den körs med :guilabel:`Ersätt alla` samlar in en del data och en annan funktion som använder den när den körs efteråt. Betrakta följande två funktioner:

en: Debugging your functions
sv: Felsökning av dina funktioner

en: You can debug the functions you create by using the standard ``print()`` function from Python. The output of print will be displayed in a popup window after the Find/replace has completed. You saw an example of using ``print()`` to output an entire table of contents above.
sv: Du kan felsöka de funktioner som du skapar med hjälp av standard ``print()`` funktionen från Python. Utskriften av print kommer visas i ett extrafönster efter att Sök/ersätt är klar. Du såg ett exempel på att använda ``print()`` för att mata ut en hel innehållsförteckning ovan.

en: Choose file order when running on multiple HTML files
sv: Välj filordning när flera HTML-filer körs

en: When you run a :guilabel:`Replace all` on multiple HTML files, the order in which the files are processes depends on what files you have open for editing. You can force the search to process files in the order in which the appear by setting the ``file_order`` attribute on your function, like this:
sv: När du kör :guilabel:`Ersätt alla` på flera HTML-filer beror ordningen som filerna behandlas på på vilka filer du har öppna för redigering. Du kan tvinga sökningen att behandla filer i den ordning de visas genom att ställa in attributet ``file_order`` i din funktion, så här:

en: ``file_order`` accepts two values, ``spine`` and ``spine-reverse`` which cause the search to process multiple files in the order they appear in the book, either forwards or backwards, respectively.
sv: ``file_order`` accepterar två värden, ``spine`` och ``spine-reverse`` vilka får sökprocessen att behandla flera filer i den ordning de dyker upp i boken, antingen framåt eller bakåt.

en: Having your function called an extra time after the last match is found
sv: Att få din funktion anropad en extra gång efter att den senaste träffen hittats

en: Sometimes, as in the auto generate table of contents example above, it is useful to have your function called an extra time after the last match is found. You can do this by setting the ``call_after_last_match`` attribute on your function, like this:
sv: Ibland, som i exemplet med den automatiskt skapande av innehållsförteckning ovan, är det användbart att få din funktion anropad en extra gång efter att den sista träffen hittats. Du kan göra detta genom att ställa in attributet ``call_after_last_match`` på din funktion, så här:

en: Appending the output from the function to marked text
sv: Lägga till utmatning från funktionen till markerad text

en: When running search and replace on marked text, it is sometimes useful to append so text to the end of the marked text. You can do that by setting the ``append_final_output_to_marked`` attribute on your function (note that you also need to set ``call_after_last_match``), like this:
sv: När du kör sök och ersätt på markerad text är det ibland användbart att lägga till sådan text i slutet av den markerade texten. Du kan göra det genom att ställa in attributet ``append_final_output_to_marked`` på din funktion (observera att du också måste ställa in ``call_after_last_match``), så här:

en: Suppressing the result dialog when performing searches on marked text
sv: Undertryck resultatdialogrutan när sökning sker med markerad text

en: You can also suppress the result dialog (which can slow down the repeated application of a search/replace on many blocks of text) by setting the ``suppress_result_dialog`` attribute on your function, like this:
sv: Du kan också undertrycka resultatdialogrutan (som kan bromsa upp upprepad tillämpning av en sök/ersätt på många textblock ) genom att ställa in ``suppress_result_dialog`` attributet på din funktion, så här:

en: More examples
sv: Fler exempel

en: More useful examples, contributed by calibre users, can be found in the `calibre E-book editor forum <https://www.mobileread.com/forums/showthread.php?t=237181>`_.
sv: Mer användbara exempel som tillförs av calibre-användare kan hittas i `forumet för calibre e-bokredigeraren <https://www.mobileread.com/forums/showthread.php?t=237181>`_.
