[NUI] Add TextPageUtil (#1819)
authorJoogabYun <40262755+JoogabYun@users.noreply.github.com>
Wed, 15 Jul 2020 04:48:28 +0000 (13:48 +0900)
committerGitHub <noreply@github.com>
Wed, 15 Jul 2020 04:48:28 +0000 (13:48 +0900)
src/Tizen.NUI/src/internal/Interop/Interop.TextUtils.cs
src/Tizen.NUI/src/public/BaseComponents/TextUtils.cs
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/TextPageSample.cs [new file with mode: 0755]
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/TextPageUtil.cs [new file with mode: 0755]
test/Tizen.NUI.Samples/Tizen.NUI.Samples/res/pl_PL.txt [new file with mode: 0755]

index 13bd92e..81d719b 100755 (executable)
@@ -234,6 +234,9 @@ namespace Tizen.NUI
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_TextUtils_UpdateBuffer")]
             public static extern void TextUtils_UpdateBuffer(global::System.Runtime.InteropServices.HandleRef jarg1, global::System.Runtime.InteropServices.HandleRef jarg2, uint jarg3, uint jarg4, bool jarg5);
 
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_TextUtils_GetLastCharacterIndex")]
+            public static extern global::System.IntPtr TextUtils_GetLastCharacterIndex(global::System.Runtime.InteropServices.HandleRef jarg1);
+
         }
     }
 }
\ No newline at end of file
index 895a7e5..8c963f0 100755 (executable)
@@ -1000,6 +1000,18 @@ namespace Tizen.NUI.BaseComponents
             Interop.TextUtils.TextUtils_UpdateBuffer(PixelBuffer.getCPtr(src), PixelBuffer.getCPtr(dst), x, y, blend);
             if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
+
+        /// <summary>
+        /// Splits the text in pages of the size given in @p textParameters
+        /// @note The returned indices are indices to utf32 characters. The input text is encoded in utf8.
+        /// <returns> An array with the indices of the last character of each page
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public static Tizen.NUI.PropertyArray GetLastCharacterIndex(RendererParameters textParameters)
+        {
+            Tizen.NUI.PropertyArray ret = new Tizen.NUI.PropertyArray(Interop.TextUtils.TextUtils_GetLastCharacterIndex(RendererParameters.getCPtr(textParameters)), true);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
     }
 
 }
diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/TextPageSample.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/TextPageSample.cs
new file mode 100755 (executable)
index 0000000..d3399c4
--- /dev/null
@@ -0,0 +1,66 @@
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.NUI.Wearable;
+
+using System;
+using System.IO;
+using Tizen.System;
+
+namespace Tizen.NUI.Samples
+{
+    public class TextPageSample : IExample
+    {
+        private TextLabel label;
+        private View root;
+
+        public string LoadTerms()
+        {
+            string terms = null;
+            var filename = "res/pl_PL.txt";
+
+            try {
+                terms = File.ReadAllText(filename);
+            } catch (Exception e) {
+                Tizen.Log.Debug("oobe", $"Unable to load terms: {e.Message}");
+                return null;
+            }
+            return terms;
+        }
+
+
+        public void Activate()
+        {
+            Window window = NUIApplication.GetDefaultWindow();
+
+            TextLabelStyle attr = new TextLabelStyle
+            {
+
+                BackgroundColor = Color.Yellow,
+                TextColor = Color.Blue,
+            };
+
+
+            label = new TextLabel(attr);
+            label.Size = new Size(300, 700);
+            label.PointSize = 11.0f;
+            label.MultiLine = true;
+
+
+            TextPageUtil util = new TextPageUtil();
+            int pageCount = util.SetText( label, LoadTerms() );
+            Tizen.Log.Error("NUI", $"pageCount: {pageCount}\n");
+            label.Text = util.GetText(1);
+            window.Add(label);
+        }
+
+        public void Deactivate()
+        {
+            if (root != null)
+            {
+                NUIApplication.GetDefaultWindow().Remove(root);
+                root.Dispose();
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/TextPageUtil.cs b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/TextPageUtil.cs
new file mode 100755 (executable)
index 0000000..6e110ff
--- /dev/null
@@ -0,0 +1,307 @@
+using System.Collections.Generic;
+using System;
+using System.IO;
+
+
+using Tizen.NUI;
+using Tizen.NUI.BaseComponents;
+using Tizen.NUI.Components;
+using Tizen.NUI.Wearable;
+
+namespace Tizen.NUI.Samples
+{
+  class PageData
+  {
+    public string previousTag  {get; set;}
+    public string endTag {get; set;}
+    public int startOffset {get; set;}
+    public int endOffset {get; set;}
+  }
+
+  class TagData
+  {
+    public string tagName {get; set;}
+    public string attributeName {get; set;}
+    public bool isEndTag {get; set;}
+  }
+
+  public class TextPageUtil
+  {
+    private static char LESS_THAN      = '<';
+    private static char GREATER_THAN   = '>';
+    private static char EQUAL          = '=';
+    private static char QUOTATION_MARK = '\'';
+    private static char SLASH          = '/';
+    private static char BACK_SLASH     = '\\';
+    private static char AMPERSAND      = '&';
+    private static char HASH           = '#';
+    private static char SEMI_COLON     = ';';
+    private static char CHAR_ARRAY_END = '\0';
+    private static char HEX_CODE       = 'x';
+    private static byte WHITE_SPACE    = 0x20;
+
+    private static int TEXTPAGE_TEXT_CHUNK = 20000;
+
+    private int totalPageCnt;
+
+    private List<PageData> pageList;
+    private List<TagData> tagList;
+    private StringReader stream;
+    private List<char> characterList;
+    private string pageString;
+
+
+    public int SetText(TextLabel label, string str)
+    {
+      if(str == null) return 0;
+
+      // perform this operation to match the utf32 character used in native Dali.
+      bool previousMarkup = label.EnableMarkup;
+      label.EnableMarkup = false;
+      label.Text = str;
+      pageString = label.Text;
+      label.EnableMarkup = previousMarkup;
+      label.MultiLine = true;
+      label.Ellipsis = false;
+
+      int length = pageString.Length;
+      int remainLength = length;
+      int offset = 0;
+      int cutOffIndex = 0;
+
+      // init
+      pageList = new List<PageData>();
+      tagList = new List<TagData>();
+      characterList = new List<char>();
+
+      stream = new StringReader(pageString);
+
+      RendererParameters textParameters = new RendererParameters();
+      textParameters.Text = pageString;
+      textParameters.HorizontalAlignment = label.HorizontalAlignment;
+      textParameters.VerticalAlignment = label.VerticalAlignment;
+      textParameters.FontFamily = label.FontFamily;
+      textParameters.FontWeight = "";
+      textParameters.FontWidth = "";
+      textParameters.FontSlant = "";
+      textParameters.Layout = TextLayout.MultiLine;
+      textParameters.TextColor = Color.Black;
+      textParameters.FontSize = label.PointSize;
+      textParameters.TextWidth = (uint)label.Size.Width;
+      textParameters.TextHeight = (uint)label.Size.Height;
+      textParameters.EllipsisEnabled = true;
+      textParameters.MarkupEnabled = previousMarkup;
+
+
+      Tizen.NUI.PropertyArray cutOffIndexArray = TextUtils.GetLastCharacterIndex( textParameters );
+      uint count = cutOffIndexArray.Count();
+      for(uint i=0; i < count; i++)
+      {
+          cutOffIndexArray.GetElementAt(i).Get(out cutOffIndex); // Gets the last index of text shown on the actual screen.
+
+          // If markup is enabled, It should parse markup
+          if(label.EnableMarkup)
+          {
+            int preOffset = offset;
+            offset = MarkupProcess( offset, cutOffIndex - preOffset );
+            remainLength -= (offset - preOffset);
+          }
+          //If markup is not enabled, parsing is not required.
+          else
+          {
+            PageData pageData = new PageData();
+            pageData.startOffset = offset;
+            int cnt = (cutOffIndex - offset ) < remainLength ? (cutOffIndex - offset ) : remainLength;
+            remainLength -= cnt;
+            offset += cnt;
+            pageData.endOffset = offset;
+            pageList.Add(pageData);
+          }
+          totalPageCnt++;
+          if(offset <= 0 ) break;
+      }
+
+      stream = null;
+      return totalPageCnt;
+    }
+
+    public string GetText(int pageNum)
+    {
+      if( pageNum > totalPageCnt || pageNum < 1 ) {
+          Tizen.Log.Error("NUI", $"Out of Range total page count : {totalPageCnt}, input page number : {pageNum}\n");
+          return "";
+      }
+
+      List<PageData> dataList = pageList.GetRange(pageNum-1, 1);
+      foreach(PageData data in dataList)
+      {
+        int cnt = data.endOffset - data.startOffset;
+        char[] charArray = new char[cnt];
+        pageString.CopyTo(data.startOffset, charArray, 0, cnt);
+        string pageText = data.previousTag+new String(charArray)+data.endTag;
+        return pageText;
+      }
+      return "";
+    }
+
+    private void SkipWhiteSpace(ref int offset)
+    {
+      int character;
+      while( ( character = stream.Read()) != -1)
+      {
+        offset++;
+        if( character == WHITE_SPACE) continue;
+        else break;
+      }
+    }
+
+    private bool IsTag(TagData tag, ref int offset)
+    {
+      List<char> tagChaList = new List<char>();
+
+      bool isTag = false;
+      bool isQuotationOpen = false;
+      bool attributesFound = false;
+      tag.isEndTag = false;
+      bool isPreviousLessThan = true;
+      bool isPreviousSlash = false;
+
+      int character;
+
+      tag.tagName = "";
+      tag.attributeName = "";
+      // SkipWhiteSpace(ref offset);
+      while((!isTag) && ((character = stream.Read()) != -1)) {
+        offset++;
+        characterList.Add((char)character);
+        if( !isQuotationOpen && ( SLASH == character ) ) // '/'
+        {
+          if (isPreviousLessThan)
+          {
+            tag.isEndTag = true;
+          }
+          else
+          {
+            // if the tag has a '/' it may be an end tag.
+            isPreviousSlash = true;
+          }
+          isPreviousLessThan = false;
+          // SkipWhiteSpace(ref offset);
+        }
+        else if( GREATER_THAN == character ) // '>'
+        {
+          isTag = true;
+          if (isPreviousSlash)
+          {
+            tag.isEndTag = true;
+          }
+
+          if(!attributesFound) {
+            tag.tagName = new String(tagChaList.ToArray());
+          } else {
+            tag.attributeName = new String(tagChaList.ToArray());
+          }
+
+          isPreviousSlash = false;
+          isPreviousLessThan = false;
+        }
+        else if( QUOTATION_MARK == character )
+        {
+          tagChaList.Add((char)character);
+          isQuotationOpen = !isQuotationOpen;
+
+          isPreviousSlash = false;
+          isPreviousLessThan = false;
+        }
+        else if( WHITE_SPACE >= character || EQUAL == character ) // ' ', '='
+        {
+          // Let's save tag name.
+          if(!attributesFound) {
+            tag.tagName = new String(tagChaList.ToArray());
+            tagChaList.Clear();
+          }
+          tagChaList.Add((char)character);
+          // If the tag contains white spaces then it may have attributes.
+          if( !isQuotationOpen )
+          {
+            attributesFound = true;
+          }
+        }
+        else
+        {
+          tagChaList.Add((char)character);
+          isPreviousSlash = false;
+          isPreviousLessThan = false;
+        }
+      }
+      return isTag;
+    }
+
+
+    private int MarkupProcess(int startOffset, int cutOffIndex)
+    {
+
+      int count = 0;
+      int offset = startOffset;
+      int character = 0;
+      characterList.Clear();
+      PageData pageData = new PageData();
+
+      pageData.startOffset = offset;
+
+      bool isPreviousLessThan = false;
+      bool isPreviousSlash = false;
+
+      // If the markup was previously open, the markup tag should be attached to the front.
+      string tag ="";
+      foreach (TagData data in tagList)
+      {
+        tag += "<"+data.tagName+data.attributeName+">";
+      }
+      pageData.previousTag = tag;
+
+
+      bool isTag = false;
+      while( (character = stream.Read()) != -1 )
+      {
+        offset++;
+        characterList.Add((char)character);
+
+        TagData tagData = new TagData();
+        isTag = false;
+        if( LESS_THAN == character ) // '<'
+        {
+          isTag = IsTag(tagData, ref offset);
+        }
+
+        if(isTag) {
+          if(tagData.isEndTag) {
+            int lastIndex = tagList.Count;
+            tagList.RemoveAt(lastIndex-1);
+          } else {
+            tagList.Add(tagData);
+          }
+        } else {
+          count++;
+        }
+        if(count >= cutOffIndex) break;
+
+      }
+
+      // If the markup was previously open, you should attach the label tag.
+      tag ="";
+      foreach (TagData data in tagList)
+      {
+        tag = "</"+data.tagName+">" + tag;
+      }
+      pageData.endTag = tag;
+
+      pageData.endOffset = offset;
+      pageList.Add(pageData);
+
+      if(character == -1) offset = -1;
+      return offset;
+    }
+
+  }
+}
\ No newline at end of file
diff --git a/test/Tizen.NUI.Samples/Tizen.NUI.Samples/res/pl_PL.txt b/test/Tizen.NUI.Samples/Tizen.NUI.Samples/res/pl_PL.txt
new file mode 100755 (executable)
index 0000000..a53fec5
--- /dev/null
@@ -0,0 +1,56 @@
+   < Samsung Galaxy Store Nutzungsbedingungen für Benutzer >
+BITTE LESEN SIE SICH DIESE NUTZUNGSBEDINGUNGEN FÜR DEN SAMSUNG GALAXY STORE („Bedingungen“) SORGFÄLTIG DURCH, BEVOR SIE DEN SAMSUNG GALAXY STORE NUTZEN UND DIE BEDINGUNGEN ANNEHMEN, DA DIESE EINE BINDENDE RECHTLICHE VEREINBARUNG
+Unterschrift (nur bei Brief): …
+Datum: …
+Falls bei Ihnen technische Probleme beim Zugriff auf den Inhalt, den Sie gekauft haben, entstehen, müssen Sie sich innerhalb von 2 Monaten nach Aufgabe Ihrer Bestellung unter http://help.content.samsung.com/ an uns wenden. Falls Samsung feststellt, dass die kostenpflichte App oder der gekaufte Inhalt mangelhaft ist oder technische Probleme den Download der kostenpflichten App oder des Inhalts verhindern, und vorausgesetzt, Sie haben Samsung innerhalb von 7 Tagen nach Ihrem Kauf kontaktiert, kann Samsung entsprechend Ihrer Anfrage die kostenpflichtige App oder den Inhalt ersetzen oder eine Rückerstattung ausstellen. Die Rückerstattung wird nicht ausgestellt, wenn Samsung nach alleinigem Ermessen feststellt, dass die Anfrage betrügerisch oder missbräuchlich ist.
+
+7. Lizenz für Inhalte
+7.1 Die Inhalte, die Ihnen über den Dienst bereitgestellt werden, werden an Sie lizenziert, nicht verkauft. Ihre Lizenz für jeden Inhalt, die Sie über den Dienst erwerben, unterliegt der anwendbaren Endbenutzerlizenzvereinbarung oder anderen anwendbaren Endbenutzer-Nutzungsbedingungen. Sämtliche Ihnen nicht ausdrücklich gewährten Rechte bleiben vorbehalten.
+7.2 Sie bestätigen, dass Ihre Lizenz für jeden Dritt-Inhalt über die Dienste einer separaten Vereinbarung nur zwischen Ihnen und dem Drittanbieter von Inhalten unterliegt, und dass der Drittanbieter von Inhalten allein für Folgendes verantwortlich ist: (a) den lizenzierten Dritt-Inhalt, (b) die darin enthaltene(n) Inhalte, Dienste, Werbung, Funktionen und Datenverarbeitung, (c) jegliche gewährten Garantien, und (d) jegliche Forderungen, die Sie in Bezug auf solche Dritt-Inhalte oder Ihre Nutzung ihrer haben können. Sie bestätigen, dass Samsung (i) bei der Bereitstellung des Dritt-Inhalts an Sie lediglich als Vertriebsunternehmen fungiert, (ii) keine Partei einer solchen Lizenz ist und (iii) nicht für den Dritt-Inhalt, seine Inhalte oder Funktionen oder jegliche Garantien oder Forderungen, die Sie in Bezug auf den Dritt-Inhalt oder Ihre Nutzung seiner haben können, verantwortlich ist.
+7.3 Die Dienste stellen Inhalte an Endkunden nur für die nicht-kommerzielle Verwendung zur Verfügung. Sie sichern zu und gewährleisten, dass Sie den von Ihnen erworbenen Inhalt ausschließlich auf Ihre Geräte und für Ihren persönlichen Gebrauch herunterladen. Inhalte dürfen beliebig oft und auf mehrere Ihrer Geräte, die auf Ihrem Konto registriert sind, jedoch in keinem Fall auf mehr als zehn (10), heruntergeladen werden, ausdrücklich vorausgesetzt, dass nicht mehr als ein (1) Exemplar auf einem Gerät gleichzeitig installiert ist. Sie bestätigen außerdem, dass (a) Samsung nach eigenem Ermessen nach vorheriger Benachrichtigung die Anzahl der Geräte, auf die Sie Inhalte herunterladen können, festlegen, reduzieren oder ändern kann, (b) manche Inhalte, insbesondere Inhalte, die Sie innerhalb eines Dienstes mit oder ohne Bezahlung erwerben, nicht auf mehrere Geräte heruntergeladen werden dürfen und (c) nicht alle Ihre Geräte, unabhängig davon, ob sie für dieselbe Plattform bestimmt sind, für mehrfache Downloads geeignet sein können.
+7.4 Ihnen ist bekannt, dass die Dienste und die Inhalte ein Sicherheitstool mit Technologie zum Schutz digitaler Informationen enthalten („Sicherheitstool“). Die Nutzung der Inhalte durch Sie unterliegt bestimmten Nutzungsbeschränkungen, die von diesem Sicherheitstool festgelegt werden.
+
+8. Systemanforderungen
+Für die Nutzung der Dienste ist ein Gerät erforderlich, das mit den Diensten kompatibel ist. Die Nutzung der Dienste erfordert ggf. ein Gerät wie einen Computer, Laptop, ein Smartphone, Tablet, Wearable, Internetzugang (es können Gebühren anfallen) und bestimmte Software (es können Gebühren anfallen). Darüber hinaus sind ggf. von Zeit zu Zeit Updates und Upgrades erforderlich. Da die Nutzung der Dienste Hardware, Software und einen Internetzugang voraussetzt, hängt der Umfang der Nutzung der Dienste von der Leistungsfähigkeit dieser Faktoren ab. Wir empfehlen dringend einen Hochgeschwindigkeits-Internetzugang. Sie bestätigen und erklären sich damit einverstanden, dass derartige Systemanforderungen, die möglicherweise von Zeit zu Zeit geändert werden, allein in Ihrer Verantwortung liegen.
+
+9. Schutzrechte
+9.1 Samsung bzw. die Lizenzgeber von Samsung besitzen sämtliche gesetzlichen Rechte und Schutzrechte an den Diensten einschließlich aller verbundenen geistigen Eigentumsrechte. Dies gilt sowohl für eingetragene als auch für nicht eingetragene Schutzrechte weltweit.
+9.2 Sie sind nicht berechtigt, die Handelsbezeichnungen, Marken, Dienstleistungsmarken, Logos, Domain-Namen und sonstige charakteristische Markenmerkmale von Samsung zu nutzen.
+9.4 Sie erklären sich damit einverstanden, dass es Ihnen nicht gestattet ist, eigentumsrechtliche Hinweise (einschließlich urheber- und markenrechtlicher Hinweise), die an den Diensten oder Inhalten angebracht oder in diesen enthalten sind, zu entfernen, zu verdecken oder zu verändern.
+
+10. Software-Updates und Verfügbarkeit der Dienste
+10.1 Wenn die Funktion „automatische Updates“ aktiviert ist (wie in der standardmäßigen Einstellung im System-Update-Menü in den Einstellungen) kann die Software, die Sie für die Dienste nutzen, Updates von Samsung von Zeit zu Zeit automatisch herunterladen und installieren. Diese Updates können dazu dienen, die Dienste zu verbessern, zu erweitern und weiterzuentwickeln, und können aus Fehlerbehebungen, Funktionserweiterungen, neuen Softwaremodulen oder völlig neuen Versionen bestehen. Sie stimmen zu, solche Updates zu erhalten und Samsung zu erlauben, Ihnen solche Updates als Teil Ihrer Nutzung der Dienste zu liefern. Wenn Sie sich dazu entschlossen haben, die Funktion „automatische Updates“ zu deaktivieren, können Sie die Verfügbarkeit neuer Updates prüfen, indem Sie in den Einstellungen das Menü „Update suchen“ wählen. Angesichts der Wichtigkeit, Updates für Sicherheitssoftware zur Verteidigung gegen neue Bedrohungen rechtzeitig zu erhalten, werden sicherheitsbezogene Updates jedoch möglicherweise ohne Ihre vorherige Zustimmung automatisch heruntergeladen und installiert, auch wenn Sie die Funktion „automatische Updates“ deaktiviert haben. Wir empfehlen Ihnen, in regelmäßigen Abständen zu prüfen, ob Updates verfügbar sind, um eine optimale Funktion des Geräts sicherzustellen.
+
+10.2 Samsung behält sich das Recht vor, die Dienste nach alleinigem Ermessen nach Mitteilung an Sie zu ändern. Sie werden über jegliche Änderungen benachrichtigt und können diesen Änderungen innerhalb eines vernünftigen Zeitraums widersprechen. Wenn Sie den Änderungen nicht widersprechen oder wenn Sie nach Erhalt einer derartigen Mitteilung auf den Dienst zugreifen oder diesen verwenden, gilt dies als uneingeschränkte Zustimmung und Einverständniserklärung Ihrerseits im Hinblick auf diese Änderungen. Falls Sie den Änderungen widersprechen, ist Samsung berechtigt, Ihr Recht zur Nutzung des Dienstes zu kündigen. Samsung informiert Sie in der Änderungsmitteilung über diese Folgen. Die Dienste sind möglicherweise nicht immer verfügbar, wie z. B. bei Wartungsunterbrechungen. Samsung kann die Dienste jederzeit nach vorheriger Mitteilung an Sie nach alleinigem Ermessen ganz oder teilweise aussetzen oder einstellen.
+10.3 Sie dürfen nicht über andere Mittel als die Schnittstelle für die Dienste, die von Samsung bereitgestellt wird, auf die Dienste zugreifen oder dies versuchen. Ohne Beschränkung des Vorstehenden dürfen Sie nicht versuchen, auf den Dienst (oder Teile davon) über andere automatisierte Mittel einschließlich Scripts oder Web Crawler zuzugreifen oder dies zu versuchen. Sie dürfen zudem nicht versuchen, den Code oder die Programmierung die Dienste zu ändern oder den Quellcode des Dienstes oder der damit verbundenen Tools zu erhalten oder zu ändern. Sie sind nicht berechtigt, über jegliche Mittel oder Geräte den Betrieb oder die Nutzung des Dienstes zu beeinträchtigen oder dies zu versuchen einschließlich, aber nicht beschränkt auf Spam-Mitteilungen, Hacken, das Hochladen von Computerviren oder Zeitbomben. Sie sind nicht berechtigt, unter Verwendung des Dienstes persönliche Daten zu sammeln oder zu erfassen einschließlich, aber nicht beschränkt auf Kontonamen und Kontaktdaten. Sie sind nicht berechtigt, sich als eine andere Person auszugeben bzw. zu behaupten, eine andere Person zu sein einschließlich, aber nicht beschränkt darauf, durch Erstellen betrügerischer oder nachgemachter Konten oder Nutzung des Bildes einer anderen Person ohne deren Einverständnis. Sie sind nicht berechtigt, jegliche Robots, Spiders, Scripts oder sonstige manuelle oder automatische Programme oder andere Mittel zu verwenden, um Darstellung, Betrieb oder beabsichtigte Verwendung von jeglichem Merkmal, jeglicher Funktion oder jeglichem Teil des Dienstes zu extrahieren, herunterzuladen, zu indizieren, hierfür mehrere Konten zu erstellen, über Frames zu übernehmen, einzubinden, auszuwerten, auszulesen, zu reproduzieren oder zu umgehen.
+
+11. Beendigung
+11.1 Diese Vereinbarung bleibt bis zu ihrer Kündigung in Kraft. Sie bzw. Samsung können wie folgt kündigen.
+11.2 Wenn Sie Ihr Konto kündigen möchten, benachrichtigen Sie uns bitte über das Hilfe-Menü des Stores. Nach Erhalt Ihrer Mitteilung kündigt Samsung Ihr Konto umgehend, vorausgesetzt, Sie haben alle ausstehenden Beträge, die mit Ihrem Konto verbunden sind, beglichen. Wenn Ihr Konto geschlossen wird, werden alle Daten oder anderen Informationen, die mit Ihrem Konto verbunden sind, endgültig gelöscht. Samsung haftet für eine solche Löschung als Ergebnis Ihrer Kontoschließung nicht. Die Kündigung Ihres Kontos als Kunde von Samsung hat keine Auswirkung auf Ihre Nutzung unserer Dienste als Verkäufer.
+11.3 Samsung kann Ihr Konto oder Ihre Nutzung der Dienste jederzeit und aus jeglichem Grund durch schriftliche Kündigungsmitteilung mit angemessener Frist an die E-Mail-Adresse, die Sie in Ihren Registrierungsdaten angegeben haben, kündigen. Fällige Zahlungen müssen Sie sofort nach Kündigung begleichen. Die Kündigung Ihres Kontos als Käufer von Samsung hat keine Auswirkung auf Ihre Nutzung unserer Dienste als Verkäufer.
+
+12. Haftungsausschluss und -beschränkung
+12.1 Dritt-Websites und -Inhalte. Die Dienste können Links zu anderen Websites und/oder Inhalten umfassen. Samsung hat keine Kontrolle über Websites und Inhalte, die nicht von Samsung bereitgestellt werden, und schließt eine Verantwortung oder Haftung für diese aus.
+12.2 Haftungsausschlüsse. IM GRÖSSTMÖGLICHEN DURCH DAS ANWENDBARE RECHT GESTATTETEN UMFANG WERDEN DIE DIENSTE UND DIE SAMSUNG-INHALTE IM „ISTZUSTAND“, „WO VORHANDEN“ UND „WIE VERFÜGBAR“ UND OHNE GEWÄHRLEISTUNGEN JEGLICHER ART BEREITGESTELLT. SAMSUNG, DIE VERBUNDENEN UNTERNEHMEN VON SAMSUNG UND SEINE LIZENZGEBER GEBEN KEINE ZUSICHERUNGEN ODER GEWÄHRLEISTUNGEN ODER GARANTIEN JEGLICHER ART ODER NATUR, OB AUSDRÜCKLICHER ODER STILLSCHWEIGER ART, HINSICHTLICH DER SAMSUNG-INHALTE UND -DIENSTE AB, UND SCHLIESSEN IM DURCH DAS ANWENDBARE RECHT GESTATTETEN UMFANG AUSDRÜCKLICH ALLE SOLCHE GEWÄHRLEISTUNGEN EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF JEGLICHE STILLSCHWEIGENDE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, AUS. OHNE BESCHRÄNKUNG DES VORSTEHENDEN SICHERN SAMSUNG, DIE VERBUNDENEN UNTERNEHMEN VON SAMSUNG UND SEINE LIZENZGEBER NICHT ZU UND GEWÄHRLEISTEN UND GARANTIEREN AUCH NICHT, DASS DIE SAMSUNG-INHALTE UND -DIENSTE (I) MIT IHRER HARDWARE ODER SOFTWARE KOMPATIBEL SIND, (II) UNUNTERBROCHEN, ZEITGERECHT, SICHER ODER FEHLERFREI BETRIEBEN WERDEN, (III) IMMER VERFÜGBAR ODER FREI VON SCHÄDLICHEN KOMPONENTEN ODER MÄNGELN SEIN WERDEN EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF VIREN, STÖRUNGEN, SCHÄDEN ODER ANDERE SICHERHEITSWEISUNGEN, ODER (IV) SICHER ODER GEGEN HACKING ODER ANDEREN UNBEFUGTEN ZUGRIFF IMMUN SIND (EINSCHLIESSLICH DER SAMSUNGS-INHALTE, DIE IHNEN BEREITGESTELLT WERDEN, UND DER INFORMATIONEN, DIE SIE BEREITSTELLEN).
+12.3 Haftungsbeschränkung. IM DURCH DAS ANWENDBARE RECHT GESTATTETEN UMFANG HAFTEN SAMSUNG, DIE VERBUNDENEN UNTERNEHMEN VON SAMSUNG ODER SEINE LIZENZGEBER IN KEINEM FALL IHNEN ODER DRITTEN GEGENÜBER FÜR INDIREKTE, NEBEN-, FOLGE-, BESONDERE, VERSCHÄRFTE ODER STRAFSCHÄDEN ODER FÜR VERLORENE GEWINNE, SELBST WENN SAMSUNG, DIE VERBUNDENEN UNTERNEHMEN VON SAMSUNG ODER SEINE LIZENZGEBER ÜBER DIE MÖGLICHKEIT SOLCHER SCHÄDEN INFORMIERT WURDEN, AUSSER WIE GEMÄSS GELTENDEM RECHT ANDERWEITIG VORGESEHEN. DIESE BESCHRÄNKUNG UND DIESER VERZICHT GELTEN AUCH FÜR JEGLICHE FORDERUNGEN, DIE SIE MÖGLICHERWEISE GEGEN EINE ANDERE PARTEI VORBRINGEN, SOFERN SAMSUNG DIESE PARTEI FÜR DERARTIGE FORDERUNGEN ENTSCHÄDIGEN MÜSSTE. IN KEINEM FALL ÜBERSCHREITET DIE GESAMTHAFTUNG VON SAMSUNG IHNEN GEGENÜBER GEMÄSS DIESER VEREINBARUNG DEN KAUFPREIS DER ANWENDBAREN INHALTE UND DIENSTE.
+
+13. Entschädigung
+Im durch das anwendbare Recht gestatteten Umfang werden Sie Samsung, jedes verbundene Unternehmen von Samsung, seine Lizenzgeber und alle leitenden Angestellten, Direktoren, Vertreter und Mitarbeiter von Samsung, jedes verbundenen Unternehmens von Samsung und seiner Lizenzgeber und jegliche Partei, die im Namen von Samsung handelt, für jegliche Forderungen, Klagen, Verbindlichkeiten, Verluste, Schäden, Urteile, Kosten und Ausgaben einschließlich angemessener Anwaltshonorare Dritter entschädigen, davon freistellen und dagegen schadlos halten, soweit sich diese aus dem folgenden ergeben: (i) jeglicher Nutzung der Dienste durch Sie oder jegliche Person, der Sie diese erlauben, entgegen dieser Bedingungen, (ii) jeglicher Verletzung dieser Bedingungen durch Sie oder eine Person, der Sie erlauben, die Dienste zu nutzen, oder (iii) jeglicher Verletzungen von Gesetzen, Vorschriften oder den Rechten eines Dritten durch Sie oder eine Person, der Sie erlauben, die Dienste zu nutzen.
+
+14. Urheberrechtsschutz
+Samsung reagiert auf Mitteilungen über angebliche Urheberrechtsverletzungen und kann die Konten der Personen, die Urheberrechte angeblichen verletzt haben, schließen. Falls Sie glauben, dass ein Dritter Ihr Urheberrecht verletzt hat, kontaktieren Sie uns bitte über die Hilfe-Menü des Stores.
+
+15. Werbung
+Durch Annahme dieser Bedingungen bestätigen Sie, dass einige der Dienste über Werbeeinnahmen unterstützt werden und Werbeanzeigen und Werbeaktionen anzeigen können. Als Erwägungen für den Zugriff zu den Diensten und ihre Nutzung stimmen Sie zu, dass Samsung nach alleinigem Ermessen Werbung auf den Diensten platzieren kann.
+
+16. Allgemeine Geschäftsbedingungen
+16.1 Diese Bedingungen und sonstige Bedingungen und Richtlinien, auf die in diesen Bedingungen verwiesen wird, sind die ausschließliche gesetzliche Grundlage zwischen Ihnen und Samsung. Sie regeln die Nutzung der Dienste und ersetzen bestehende Vereinbarungen über die Dienste zwischen Ihnen und Samsung. Diese Bedingungen gelten jedoch nicht für Inhalte, Software und Dienste, die Ihnen aufgrund einer separaten schriftlichen Vereinbarung von Samsung bereitgestellt werden.
+16.2 Sie erklären sich damit einverstanden, dass Samsung Ihnen per E-Mail, regulärer Post oder Posts über die Dienste Mitteilungen zukommen lassen darf; dies gilt einschließlich der Mitteilungen zu Änderungen dieser Nutzungsbedingungen.
+16.3 Wenn Samsung gesetzliche Rechte oder Rechtsmittel, die Samsung nach den Bedingungen oder nach geltendem Recht zustehen, nicht ausübt, ist dies kein genereller Verzicht auf diese Rechte oder Rechtsmittel. Diese Rechte und Rechtsmittel bestehen weiter.
+16.4 Wenn ein zuständiges Gericht entscheidet, dass eine einzelne Bedingung ungültig ist, entfällt diese ohne Auswirkung auf die restlichen Bedingungen. Die übrigen Bestimmungen dieser Nutzungsbedingungen bleiben weiterhin wirksam und durchsetzbar.
+16.5 Sie bestätigen und stimmen zu, dass verbundene Unternehmen von Samsung Drittbegünstige dieser Bedingungen sind. Diese verbundenen Unternehmen können diese Bedingungen zu ihren Gunsten direkt durchsetzen und sie können sich auf Bestimmungen dieser Bedingungen, die einen Vorteil oder Recht auf Drittbegünstige übertragen, stützen. Abgesehen davon sind keine weiteren Personen oder Gesellschaften Drittbegünstigte. Als „verbundene Unternehmen“ von Samsung gelten alle Gesellschaften, Firmen, Unternehmen, Partnerschaften oder sonstigen Organisationen, die Samsung kontrolliert, von Samsung kontrolliert werden oder der gemeinsamen Kontrolle durch Samsung unterstehen. Die Begriffe „kontrollieren“ und „Kontrolle“ bezeichnen die Befugnis, die Geschäftsführung der jeweiligen Organisation zu bestimmen.
+16.6 Sie dürfen diese Bedingungen und Ihre Rechte und Pflichten darunter nicht übertragen, abtreten, belasten oder anderweitig veräußern. Samsung kann diese Bedingungen oder jegliche seiner Rechte oder Pflichten gemäß diesen Bedingungen jederzeit übertragen, abtreten, belasten, per Unterauftrag vergeben oder anderweitig veräußern.
+16.7 Diese Bedingungen unterliegen dem Recht der Rechtsordnung, in der Sie ansässig sind, unter Ausschluss seiner Kollisionsvorschriften. Diese Bedingungen unterliegen nicht dem Übereinkommen der Vereinten Nationen über Verträge über den internationalen Warenkauf, dessen Anwendung hiermit ausdrücklich ausgeschlossen wird. Wenn Sie ein Endverbraucher sind (und wo dieser Begriff nicht gemäß vor Ort geltendem Recht definiert ist, bedeutet dies, dass Sie „den Dienst nicht unternehmerisch, gewerblich oder beruflich verwenden“), unterliegt jegliche Streitigkeit, Meinungsverschiedenheit oder unterschiedliche Sichtweise, die sich aus diesen Bedingungen oder der Nutzung des Dienstes durch Sie ergibt, der nicht ausschließlichen Anhörung vor und Rechtsprechung durch die Gerichte des Territoriums, in dem Sie ansässig sind. Alternativ zum Recht, sich an ein Gericht zu wenden, haben Sie das Recht auf alternative Organe zur Beilegung von Streitigkeiten, wie etwa die Online Dispute Resolution (ODR) Platform (Plattform verfügbar unter http://ec.europa.eu/odr) oder ein alternatives Organ zur Beilegung von Streitigkeiten in Ihrer Rechtsordnung. Dort, wo gemäß dem vor Ort geltenden Recht eine Gerichtsstandswahl möglich ist, ist das Gericht das Gericht in der Stadt des Samsung-Unternehmens in Ihrem Land. Falls Sie kein Endverbraucher sind und eine Streitigkeit, Meinungsverschiedenheit oder unterschiedliche Sichtweise, die sich in irgendeiner Weise aus diesen Bedingungen oder der Nutzung des Dienstes durch Sie ergibt, nicht einvernehmlich beigelegt wird, unterliegt sie einem Schiedsgerichtsverfahren gemäß der Schiedsordnung der Internationalen Handelskammer. Ungeachtet des Vorstehenden ist Samsung dazu berechtigt, Unterlassungsansprüche (oder entsprechende dringende Rechtsmittel) bei jedem zuständigen Gericht geltend zu machen. Die Schiedsgerichtssprache ist Englisch.
+16.8 Um gegen eine unrechtmäßige Arbeitsweise des Dienstes und von Samsung-Inhalten vorzugehen, sollten Sie eine Beschwerde an http://help.content.samsung.com/ schicken. Die Beschwerde sollte Ihren Namen, Ihre Kontaktdaten und die Details Ihrer Beschwerde beinhalten. Samsung wird innerhalb von 30 Tagen auf Ihre Beschwerde antworten.
+
+2020-03-07
\ No newline at end of file