Advertisement
Guest User

Ontani

a guest
Feb 17th, 2010
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 9.56 KB | None | 0 0
  1. Public Class Init
  2.  
  3.     Public Shared AddS As New List(Of String)
  4.     Public Shared AddEren As New List(Of String)
  5.     Public Shared AddDeren As New List(Of String)
  6.     Public Shared AddExceptions As New Dictionary(Of String, String)
  7.  
  8.     Public Shared Sub InitializeApplication()
  9.         'Woorden die eindigen op 1 van deze karakters krijgen een -s
  10.         AddS.Add("e")
  11.         AddS.Add("a")
  12.         AddS.Add("i")
  13.         AddS.Add("o")
  14.         AddS.Add("u")
  15.         AddS.Add("y")
  16.         AddS.Add("em")
  17.         AddS.Add("el")
  18.         AddS.Add("er")
  19.         AddS.Add("en")
  20.         AddS.Add("ie")
  21.  
  22.         'Woorden in deze lijst krijgen -eren
  23.         AddEren.Add("ei")
  24.         AddEren.Add("gemoed")
  25.         AddEren.Add("kalf")
  26.         AddEren.Add("kind")
  27.         AddEren.Add("lam")
  28.         AddEren.Add("lied")
  29.         AddEren.Add("rund")
  30.  
  31.         'Woorden in deze lijst krijgen -deren
  32.         AddDEren.Add("been")
  33.         AddDEren.Add("hoen")
  34.  
  35.         'Woorden in deze lijst hebben geen of een speciaal meervoud
  36.         AddExceptions.Add("data", "data")
  37.         AddExceptions.Add("weer", "weer")
  38.         AddExceptions.Add("vat", "vaten")
  39.         AddExceptions.Add("dag", "dagen")
  40.         AddExceptions.Add("dak", "daken")
  41.         AddExceptions.Add("pad", "paden")
  42.         AddExceptions.Add("dal", "sloten")
  43.         AddExceptions.Add("weg", "wegen")
  44.  
  45.     End Sub
  46.  
  47. End Class
  48.  
  49. <HideModuleName()> _
  50. Module Extensions
  51.  
  52.     <Runtime.CompilerServices.Extension()> _
  53.     Public Function ToProper(ByVal str As String) As String
  54.         Return StrConv(str, VbStrConv.ProperCase)
  55.     End Function
  56.  
  57.     <Runtime.CompilerServices.Extension()> _
  58.     Public Function ToPlural(ByVal str As String) As String
  59.         Dim result As Result
  60.  
  61.         'Check uitzonderingen
  62.         result = CheckExceptions(str)
  63.         If result.Result Then : Return result.Value
  64.         End If
  65.  
  66.         'Check voor woorden in de lijst van -deren
  67.         result = CheckDeren(str)
  68.         If result.Result Then : Return result.Value
  69.         End If
  70.  
  71.         'Check voor woorden in de lijst van -eren
  72.         result = CheckEren(str)
  73.         If result.Result Then : Return result.Value
  74.         End If
  75.  
  76.         'Check voor woorden die eindigen op -or
  77.         result = CheckOr(str)
  78.         If result.Result Then : Return result.Value
  79.         End If
  80.  
  81.         'Check voor woorden die eindigen op -us
  82.         result = CheckUs(str)
  83.         If result.Result Then : Return result.Value
  84.         End If
  85.  
  86.         'Check voor woorden die eindigen op -um
  87.         result = CheckUm(str)
  88.         If result.Result Then : Return result.Value
  89.         End If
  90.  
  91.         'Check voor woorden die een lange klank hebben
  92.         result = CheckAA(str)
  93.         If result.Result Then : Return result.Value
  94.         End If
  95.  
  96.         'Check voor woorden met een korte klank en die eindigen met 1 medeklinker
  97.         result = CheckA(str)
  98.         If result.Result Then : Return result.Value
  99.         End If
  100.  
  101.         'Check voor woorden die eindigen op s of f
  102.         result = CheckFS(str)
  103.         If result.Result Then : Return result.Value
  104.         End If
  105.  
  106.         'Check voor woorden die eindigen op 2 medeklinkers
  107.         result = CheckZZ(str)
  108.         If result.Result Then : Return result.Value
  109.         End If
  110.  
  111.         'Check voor woorden in de lijst van -s
  112.         result = CheckS(str)
  113.         If result.Result Then : Return result.Value
  114.         End If
  115.  
  116.         'Geef -en terug als het niet voorkomt in de controles
  117.         Return str & "en"
  118.     End Function
  119.  
  120.     Private Function CheckExceptions(ByVal str As String) As Result
  121.         If Init.AddExceptions.Keys.Contains(str.ToLower) Then
  122.             Return New Result() With {.Result = True, .Value = Init.AddExceptions(str.ToLower)}
  123.         Else
  124.             Return New Result() With {.Result = False, .Value = str}
  125.         End If
  126.         Return Nothing
  127.     End Function
  128.  
  129.     Private Function CheckDeren(ByVal str As String) As Result
  130.         If Init.AddDeren.Contains(str.ToLower) Then
  131.             Return New Result() With {.Result = True, .Value = str & "deren"}
  132.         Else
  133.             Return New Result() With {.Result = False, .Value = str}
  134.         End If
  135.         Return Nothing
  136.     End Function
  137.  
  138.     Private Function CheckEren(ByVal str As String) As Result
  139.         If Init.AddEren.Contains(str.ToLower) Then
  140.             Return New Result() With {.Result = True, .Value = str & "eren"}
  141.         Else
  142.             Return New Result() With {.Result = False, .Value = str}
  143.         End If
  144.         Return Nothing
  145.     End Function
  146.  
  147.     Private Function CheckAA(ByVal str As String) As Result
  148.         Dim iLength As Integer = str.Length - 1
  149.  
  150.         If CheckVowel(str(iLength - 1)) Then
  151.             If str(iLength - 1) = str(iLength - 2) Then
  152.  
  153.                 If str(iLength) = "s" Then
  154.                     Return New Result() With {.Result = True, .Value = str.Remove(iLength - 1, 2) & "zen"}
  155.                 End If
  156.  
  157.                 If str(iLength) = "f" Then
  158.                     Return New Result() With {.Result = True, .Value = str.Remove(iLength - 1, 2) & "ven"}
  159.                 End If
  160.  
  161.                 Return New Result() With {.Result = True, .Value = str.Remove(iLength - 1, 1) & "en"}
  162.             Else
  163.                 Return New Result() With {.Result = False, .Value = str}
  164.             End If
  165.         Else
  166.             Return New Result() With {.Result = False, .Value = str}
  167.         End If
  168.  
  169.     End Function
  170.  
  171.     Private Function CheckZZ(ByVal str As String) As Result
  172.         Dim iLength As Integer = str.Length - 1
  173.  
  174.         If Not CheckVowel(str(iLength)) Then
  175.             If Not CheckVowel(str(iLength - 1)) Then
  176.                 Return New Result() With {.Result = True, .Value = str & "en"}
  177.             Else
  178.                 Return New Result() With {.Result = False, .Value = str}
  179.             End If
  180.         Else
  181.             Return New Result() With {.Result = False, .Value = str}
  182.         End If
  183.  
  184.     End Function
  185.  
  186.     Private Function CheckA(ByVal str As String) As Result
  187.         Dim iLength As Integer = str.Length - 1
  188.  
  189.         'Voorlaatste letter is een klinker
  190.         If CheckVowel(str(iLength - 1)) Then
  191.             'Derdelaatste letter is geen medeklinker
  192.             If Not CheckVowel(str(iLength - 2)) Then
  193.                 'Laatste letter is een medeklinker
  194.                 If Not CheckVowel(str(iLength)) Then
  195.                     Return New Result() With {.Result = True, .Value = str & str(iLength) & "en"}
  196.                 Else
  197.                     Return New Result() With {.Result = False, .Value = str}
  198.                 End If
  199.             Else
  200.                 Return New Result() With {.Result = False, .Value = str}
  201.             End If
  202.         Else
  203.             Return New Result() With {.Result = False, .Value = str}
  204.         End If
  205.     End Function
  206.  
  207.     Private Function CheckOr(ByVal str As String) As Result
  208.         If str.ToLower.EndsWith("or") Then
  209.             Return New Result() With {.Result = True, .Value = str & "en"}
  210.         Else
  211.             Return New Result() With {.Result = False, .Value = str}
  212.         End If
  213.     End Function
  214.  
  215.     Private Function CheckUs(ByVal str As String) As Result
  216.         If str.ToLower.EndsWith("us") Then
  217.             Return New Result() With {.Result = True, .Value = str.Substring(0, str.Length - 2) & "i"}
  218.         Else
  219.             Return New Result() With {.Result = False, .Value = str}
  220.         End If
  221.     End Function
  222.  
  223.     Private Function CheckUm(ByVal str As String) As Result
  224.         If str.ToLower.EndsWith("um") Then
  225.             Return New Result() With {.Result = True, .Value = str.Substring(0, str.Length - 2) & "a"}
  226.         Else
  227.             Return New Result() With {.Result = False, .Value = str}
  228.         End If
  229.     End Function
  230.  
  231.     Private Function CheckFS(ByVal str As String) As Result
  232.         If str.ToLower.EndsWith("s") Then
  233.             Return New Result() With {.Result = True, .Value = str.Substring(0, str.Length - 1) & "zen"}
  234.         End If
  235.  
  236.         If str.ToLower.EndsWith("f") Then
  237.             Return New Result() With {.Result = True, .Value = str.Substring(0, str.Length - 1) & "ven"}
  238.         End If
  239.  
  240.         Return New Result() With {.Result = False, .Value = str}
  241.     End Function
  242.  
  243.     Private Function CheckS(ByVal str As String) As Result
  244.         For Each s As String In Init.AddS
  245.  
  246.             If str.ToLower.EndsWith(s) Then
  247.                 If Not CheckVowel(str(str.IndexOf(s))) Then
  248.                     Return New Result() With {.Result = True, .Value = str & "s"}
  249.                 End If
  250.             End If
  251.         Next
  252.         Return New Result() With {.Result = False, .Value = str}
  253.     End Function
  254.  
  255.     Private Function CheckVowel(ByVal str As String) As Boolean
  256.         Return IIf(str = "a" Or str = "e" Or str = "i" Or str = "o" Or str = "u" Or str = "y", True, False)
  257.     End Function
  258.  
  259.     Private Class Result
  260.  
  261.         Private _Result As Boolean = False
  262.         Private _Value As String = ""
  263.  
  264.         Public Property Result() As Boolean
  265.             Get
  266.                 Return Me._Result
  267.             End Get
  268.             Set(ByVal value As Boolean)
  269.                 Me._Result = value
  270.             End Set
  271.         End Property
  272.  
  273.         Public Property Value() As String
  274.             Get
  275.                 Return Me._Value
  276.             End Get
  277.             Set(ByVal value As String)
  278.                 Me._Value = value
  279.             End Set
  280.         End Property
  281.  
  282.     End Class
  283.  
  284. End Module
  285.  
  286. 'Example
  287. Imports Project.Extensions
  288.  
  289. Module Main
  290.  
  291.     Sub Main()
  292.  
  293.         MsgBox("Catalogus".ToPlural)
  294.  
  295.     End Sub
  296.  
  297. End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement